适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 中的 SQL 分析端点
Microsoft Fabric 中的仓库
此函数会在第二个字符表达式中搜索一个字符表达式,这将返回第一个表达式(如果发现存在)的开始位置。
语法
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
参数
expressionToFind
一个字符表达式,其中包含要查找的序列。 expressionToFind 具有 8,000 个字符的限制。
expressionToSearch
要搜索的字符表达式。
start_location
表示搜索开始位置的 integer 或 bigint 表达式 。 如果未指定 start_location ,则返回负值或零(0) 值,则搜索从 expressionToSearch 的开头开始。
返回类型
如果 expressionToSearch 具有一个 nvarchar(max)、varbinary(max) 或 varchar(max) 数据类型,则为 bigint;否则为 int 。
备注
如果 expressionToFind 或 expressionToSearch 表达式具有 Unicode 数据类型(nchar 或 nvarchar),而其他表达式则不,则 CHARINDEX 函数会将该其他表达式转换为 Unicode 数据类型。
CHARINDEX 不能与 图像、 ntext 或 文本 数据类型一起使用。
如果 expressionToFind 或 expressionToSearch 表达式具有值 NULL , CHARINDEX 则 NULL返回 。
如果在 CHARINDEXexpressionToSearch 中找不到 expressionToFind,CHARINDEX则返回 0。
CHARINDEX 根据输入排序规则执行比较。 若要在指定的排序规则中执行比较,请使用 COLLATE 对输入应用显式排序规则。
返回的起始位置从 1 开始,而不是从 0 开始。
0x0000 (char(0))是 Windows 排序规则中的未定义字符,不能包含在其中 CHARINDEX。
补充字符(代理项对)
使用补充字符(SC)排序规则时, start_location 和返回值代理项对作为一个字符,而不是两个字符。 有关详细信息,请参阅 排序规则和 Unicode 支持。
示例
A. 返回表达式的起始位置
此示例将在搜索的字符串值变量 bicycle 中搜索 @document。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
结果集如下。
-----------
48
B. 从特定位置搜索
此示例使用可选的 start_location 参数在搜索的字符串值变量 的第五个字符处开始搜索 vital 。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
结果集如下。
-----------
16
°C 搜索不存在的表达式
本示例显示未在 expressionToSearch 中查找 expressionToFind 时CHARINDEX的结果集。
DECLARE @document AS VARCHAR (64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
结果集如下。
-----------
0
D. 执行区分大小写的搜索
此示例在搜索的字符串 TEST 中执行区分大小写的字符串 This is a Test 搜索。
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX('TEST', 'This is a Test' COLLATE Latin1_General_CS_AS);
结果集如下。
-----------
0
此示例在搜索的字符串 Test 中执行区分大小写的字符串 This is a Test 搜索。
USE tempdb;
GO
SELECT CHARINDEX('Test', 'This is a Test' COLLATE Latin1_General_CS_AS);
结果集如下。
-----------
11
E. 执行不区分大小写的搜索
此示例显示搜索字符串中This is a Test字符串TEST的不区分大小写的搜索。
USE tempdb;
GO
SELECT CHARINDEX('TEST', 'This is a Test' COLLATE Latin1_General_CI_AS);
GO
结果集如下。
-----------
11
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
F. 从字符串表达式的开头搜索
此示例返回字符串 is 中字符串 This is a string 的第一个位置,从 This is a string 的位置 1(第一个字符)开始。
SELECT CHARINDEX('is', 'This is a string');
结果集如下。
---------
3
G. 从第一个位置以外的位置进行搜索
此示例返回字符串 is 中字符串 This is a string 的第一个位置,从位置 4(第四个字符)开始进行搜索。
SELECT CHARINDEX('is', 'This is a string', 4);
结果集如下。
---------
6
H. 找不到字符串时的结果
本示例显示搜索字符串中找不到字符串string_pattern时的CHARINDEX返回值。
SELECT TOP (1) CHARINDEX('at', 'This is a string')
FROM dbo.DimCustomer;
结果集如下。
---------
0