- 类别:
:doc:`/sql-reference/functions-string`(匹配/比较)
POSITION¶
搜索在第二个实参中首次出现的第一个实参,如果成功找到,则返回第一个实参在第二个实参中的位置(从 1 开始)。
如果需要查找第一次出现位置之后的位置(例如,第三次出现),可以使用 REGEXP_INSTR 函数。
- 别名:
-
请注意,CHARINDEX 函数不支持 POSITION 支持的任一语法变体。
语法¶
POSITION( <expr1>, <expr2> [ , <start_pos> ] )
POSITION( <expr1> IN <expr2> )
实参¶
必填:
expr1
表示要查找的值的字符串或二进制表达式。
expr2
表示要搜索的值的字符串或二进制表达式。
可选:
start_pos
表示从开始搜索的位置的数字(
1
表示expr2
的起始位置)。默认:
1
返回¶
此函数返回 NUMBER 类型的值。
如果任何实参为 NULL,则该函数返回 NULL。
使用说明¶
如果未找到字符串或二进制值,则函数返回
0
。如果指定的可选
start_pos
超出第二个实参(要搜索的字符串)的末尾,则函数返回0
。如果第一个实参为空(例如,空字符串),则该函数返回
1
。前两个实参的数据类型必须相同(要么是两个字符串,要么是两个二进制值)。
排序规则详细信息¶
此函数不支持以下排序规则规范:
示例¶
以下示例使用 POSITION 函数。
VARCHAR 表达式¶
找出“banana”中第一次出现的“an”:
SELECT POSITION('an', 'banana', 1);
+-----------------------------+
| POSITION('AN', 'BANANA', 1) |
|-----------------------------|
| 2 |
+-----------------------------+
在位置 3 或之后找出“banana”中第一次出现的“an”。此搜索将查找第二次出现的“an”。
SELECT POSITION('an', 'banana', 3);
+-----------------------------+
| POSITION('AN', 'BANANA', 3) |
|-----------------------------|
| 4 |
+-----------------------------+
在字符串中搜索各种字符,包括 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 |
+--------+---------------------+------------------+
BINARY 表达式¶
由于以下值是十六进制表示形式,因此单个 BINARY 字节表示为两个十六进制数字。
在此示例中,返回值为 3
,因为“EF”与第 3 个字节匹配(第一个字节为“AB”;第二个字节为“CD”,第三个字节为“EF”):
SELECT POSITION(X'EF', X'ABCDEF');
+----------------------------+
| POSITION(X'EF', X'ABCDEF') |
|----------------------------|
| 3 |
+----------------------------+
在此示例中,没有匹配项。虽然序列“BC”似乎在正在搜索的值中,但“B”是第一个字节的第二个小数点,“C”是第二个字节的第一个小数点。实际上没有字节包含“BC”,因此返回值为 ``0``(未找到)。
SELECT POSITION(X'BC', X'ABCD');
+--------------------------+
| POSITION(X'BC', X'ABCD') |
|--------------------------|
| 0 |
+--------------------------+