类别:

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

POSITION

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

别名:

CHARINDEX

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

语法

POSITION( <expr1>, <expr2> [ , <start_pos> ] )

POSITION( <expr1> IN <expr2> )
Copy

实参

必填:

expr1

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

expr2

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

可选:

start_pos

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

默认:1

使用说明

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

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

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

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

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

排序规则详细信息

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

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

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

示例

VARCHAR 表达式

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

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

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

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

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

SELECT n, h, POSITION(n in h) FROM pos;

+--------+---------------------+------------------+
| N      | H                   | POSITION(N IN 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 position(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
|                          3 |
+----------------------------+
Copy

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

select position(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
|                        0 |
+--------------------------+
Copy
语言: 中文