POSITION
返回示带字符串的特定子字符串的字符位置的 INTEGER 值表(从 1 开始计数)。
行为类型
不可变语法 1
POSITION ( substring IN string [ USING { CHARACTERS | OCTETS } ] )
参数
- substring
- (CHAR 或 VARCHAR)是要查找的子字符串
- string
- (CHAR 或 VARCHAR)是要从中查找子字符串的字符串
USING CHARACTERS | OCTETS
- 确定是否使用字符(默认)或八进制数来报告位置。
语法 2
POSITION ( substring IN string )
参数
- substring
- (VARBINARY) 为要定位的子字符串
- string
- (VARBINARY) 为要在其中定位子字符串的字符串
注意
-
当字符串和子字符串为 CHAR 或 VARCHAR 时,返回值基于字符或子字符串的八进制数位置。
-
当字符串和子字符串为 VARBINARY 时,返回值通常基于子字符串的八进制数位置。
-
字符串和子字符串必须一致。不要将 VARBINARY 与 CHAR 或 VARCHAR 混合。
-
POSITION 类似于 STRPOS,尽管 POSITION 允许通过字符和八进制数查找。
-
如果未找到字符串,则返回值为零。
示例
=> SELECT POSITION('é' IN 'étudiant' USING CHARACTERS);
position
----------
1
(1 row)
=> SELECT POSITION('ß' IN 'straße' USING OCTETS);
positionb
-----------
5
(1 row)
=> SELECT POSITION('c' IN 'abcd' USING CHARACTERS);
position
----------
3
(1 row)
=> SELECT POSITION(VARBINARY '456' IN VARBINARY '123456789');
position
----------
4
(1 row)
SELECT POSITION('n' in 'León') as 'default',
POSITIONB('León', 'n') as 'POSITIONB',
POSITION('n' in 'León' USING CHARACTERS) as 'pos_chars',
POSITION('n' in 'León' USING OCTETS) as 'pos_oct',INSTR('León','n'),
INSTRB('León','n'), REGEXP_INSTR('León','n');
default | POSITIONB | pos_chars | pos_oct | INSTR | INSTRB | REGEXP_INSTR
---------+-----------+-----------+---------+-------+--------+--------------
4 | 5 | 4 | 5 | 4 | 5 | 4
(1 row)