SQL Server CHARINDEX() 函数:返回子字符串的起始索引
CHARINDEX()
函数返回子字符串或字符在另一个字符串中的起始位置。如果未找到子字符串,则返回 0。
CHARINDEX(substring, string [, start_location])
参数
- 子字符串:要在另一个字符串中搜索的字符串或字符值。
- 字符串:要搜索子字符串参数的字符串值。
- 起始位置:可选。指示搜索应开始的起始位置的整数值。索引从 1 开始。如果未指定任何内容,则从头开始搜索。
返回值
返回一个整数,指示索引位置。
CHARINDEX()
函数不能与 image、ntext 或 text 数据类型一起使用。- 如果子字符串或字符串为 NULL 值,CHARINDEX 返回 NULL。
- 如果
CHARINDEX()
在字符串中找不到子字符串,则返回 0。 - 返回值是子字符串从字符串开头的位置,而不是从起始位置开始的位置。
示例 1
以下示例在字符串“Hello World”中搜索“e”并返回其索引位置。
示例:CHARINDEX()
SELECT CHARINDEX('e', 'Hello world')

示例 2
CHARINDEX()
函数不是区分大小写的搜索。如果在字符串“Hello world”中搜索小写字符“h”,它返回 1;即使字符“H”在字符串中是大写。
示例:CHARINDEX()
SELECT CHARINDEX('h' , 'Hello World')

以下示例在字符串表达式“Have a nice day!”中搜索单词“nice”并返回其索引位置。
示例:CHARINDEX()
Select CHARINDEX('nice', 'Have a nice day!')
上述返回 8。这是单词“nice”在字符串中开始的位置。

示例 3
在下面的示例中,我们指定了搜索应开始的位置。
示例:CHARINDEX()
SELECT CHARINDEX('nice', 'Have a nice day!' , 5) AS Result

示例 4
如果您尝试查找字符串中不存在的表达式,则返回 0。
示例:CHARINDEX()
SELECT CHARINDEX('Good', 'Have a nice day!') AS Result

示例 5
您可以使用 CHARINDEX()
函数执行区分大小写的搜索,如下所示。
如果您在字符串表达式中搜索大写“N”的单词“Nice”,则返回 0。
示例:CHARINDEX()
SELECT CHARINDEX('Nice', 'Have a nice day!' COLLATE Latin1_General_CS_AS) AS Result
注意:添加 COLLATE Latin1_General_CS_AS 使搜索区分大小写。
SQL Server 安装的默认排序规则 SQL_Latin1_General_CP1_CI_AS 不区分大小写。

如果您将子字符串中的字母“n”更改为小写,则 CHARINDEX()
返回 8,这是单词“nice”在字符串“Have a nice day!”中的起始位置。
示例:CHARINDEX()
SELECT CHARINDEX('nice', 'Have a nice day!' COLLATE Latin1_General_CS_AS) AS Result
