CHARINDEX (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库

此函数会在第二个字符表达式中搜索一个字符表达式,这将返回第一个表达式(如果发现存在)的开始位置。

Transact-SQL 语法约定

语法

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 。

备注

如果 expressionToFindexpressionToSearch 表达式具有 Unicode 数据类型(ncharnvarchar),而其他表达式则不,则 CHARINDEX 函数会将该其他表达式转换为 Unicode 数据类型。 CHARINDEX 不能与 图像ntext文本 数据类型一起使用。

如果 expressionToFindexpressionToSearch 表达式具有值 NULLCHARINDEXNULL返回 。

如果在 CHARINDEXexpressionToSearch 中找不到 expressionToFindCHARINDEX则返回 0

CHARINDEX 根据输入排序规则执行比较。 若要在指定的排序规则中执行比较,请使用 COLLATE 对输入应用显式排序规则。

返回的起始位置从 1 开始,而不是从 0 开始。

0x0000char(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 中查找 expressionToFindCHARINDEX的结果集。

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bike', @document);
GO

结果集如下。

-----------
0

此示例在搜索的字符串 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

此示例显示搜索字符串中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