- 类别:
字符串和二进制函数 (匹配/比较)
POSITION¶
搜索在第二个实参中首次出现的第一个实参,如果成功找到,则返回第一个实参在第二个实参中的位置(从 1 开始)。
- 别名:
-
请注意,CHARINDEX 函数不支持 POSITION 支持的任一语法变体。
语法¶
POSITION( <expr1>, <expr2> [ , <start_pos> ] )
POSITION( <expr1> IN <expr2> )
实参¶
必填:
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 | +-----------------------------+
在位置 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 | +--------------------------+