类别:

字符串和二进制函数 (匹配/比较)

CHARINDEX

搜索在第二个实参中首次出现的第一个实参,如果成功找到,则返回第一个实参在第二个实参中的位置(从 1 开始)。

别名:

POSITION

请注意,CHARINDEX 函数不支持 POSITION 支持的任一语法变体。

语法

CHARINDEX( <expr1>, <expr2> [ , <start_pos> ] )
Copy

实参

必填:

expr1

表示要查找的值的字符串或二进制表达式。

expr2

表示要搜索的值的字符串或二进制表达式。

可选:

start_pos

表示从何处开始搜索的数字( 1 表示 expr2 的起始位置)。

默认:1

使用说明

  • 如果任何实参为 NULL,则函数返回 NULL。

  • 如果未找到字符串或二进制值,则函数返回 0

  • 如果指定的可选 start_pos 超出第二个实参(要搜索的字符串)的末尾,则函数返回 0

  • 如果第一个实参为空(例如,空字符串),则函数返回 1

  • 前两个实参的数据类型应相同;要么都为字符串,要么都为二进制值。

排序规则详细信息

此函数不支持以下排序规则规范:

  • pi (不区分标点符号)。

  • cs-ai (区分大小写,不区分重音)。

示例

VARCHAR 表达式

找出“banana”中第一次出现的“an”:

select charindex('an', 'banana', 1);
+------------------------------+
| CHARINDEX('AN', 'BANANA', 1) |
|------------------------------|
|                            2 |
+------------------------------+
Copy

在位置 3 或之后找出“banana”中第一次出现的“an”。此搜索将查找第二次出现的“an”。

select charindex('an', 'banana', 3);
+------------------------------+
| CHARINDEX('AN', 'BANANA', 3) |
|------------------------------|
|                            4 |
+------------------------------+
Copy

在字符串中搜索各种字符,包括 Unicode 字符:

SELECT n, h, CHARINDEX(n, h) FROM pos;

+--------+---------------------+-----------------+
| N      | H                   | CHARINDEX(N, H) |
|--------+---------------------+-----------------|
|        |                     |               1 |
|        | sth                 |               1 |
| 43     | 41424344            |               5 |
| a      | NULL                |            NULL |
| dog    | catalog             |               0 |
| log    | catalog             |               5 |
| lésine | le péché, la lésine |              14 |
| nicht  | Ich weiß nicht      |              10 |
| sth    |                     |               0 |
| ☃c     | ☃a☃b☃c☃d            |               5 |
| ☃☃     | bunch of ☃☃☃☃       |              10 |
| ❄c     | ❄a☃c❄c☃             |               5 |
| NULL   | a                   |            NULL |
| NULL   | NULL                |            NULL |
+--------+---------------------+-----------------+
Copy

BINARY 表达式

请注意,由于以下值是十六进制表示形式,因此单个 BINARY 字节表示为两个十六进制数字。

在此示例中,返回值为 3,因为“EF”与第 3 个字节匹配(第一个字节为“AB”;第二个字节为“CD”,第三个字节为“EF”):

SELECT CHARINDEX(X'EF', X'ABCDEF');
+-----------------------------+
| CHARINDEX(X'EF', X'ABCDEF') |
|-----------------------------|
|                           3 |
+-----------------------------+
Copy

在此示例中,没有匹配项。虽然序列“BC”似乎在正在搜索的值中,但“B”是第一个字节的第二个小数点,“C”是第二个字节的第一个小数点;实际上没有字节包含“BC”,因此返回值为 0(未找到)。

SELECT CHARINDEX(X'BC', X'ABCD');
+---------------------------+
| CHARINDEX(X'BC', X'ABCD') |
|---------------------------|
|                         0 |
+---------------------------+
Copy
语言: 中文