SUBSTRING

给定值、位置和可选长度的条件下,返回表示指定字符串在给定位置的子字符串的值。SUBSTRING 可以截断 DOUBLE PRECISION 输入值。

行为类型

如果使用 OCTETS,则为 不可变,否则为 稳定

语法

SUBSTRING ( string, position[, length ]
    [USING {CHARACTERS | OCTETS } ] )
SUBSTRING ( string FROM position [ FOR length ]
    [USING { CHARACTERS | OCTETS } ] )

参数

string
(CHAR/VARCHAR 或 BINARY/VARBINARY)是用来提取子字符串的字符串
position
(INTEGER 或 DOUBLE PRECISION)是子字符串的开始位置(按字符或八位字节从 1 计数)。(默认值为字符。)如果位置大于给定值的长度,则返回空值。
length
(INTEGER 或 DOUBLE PRECISION)是要提取的字符或八位字节子字符串的长度。(默认值为字符。)默认为字符串的结束。如果给定长度,则结果最多是相等于长度的字节。最大长度就是给定值长度减给定位置。如果未给定长度或给定长度大于最大长度,则该长度设置为最大长度。
USING CHARACTERS | OCTETS
决定值为字符(默认)还是八位字节形式。

示例

=> SELECT SUBSTRING('abc'::binary(3),1);
 substring
-----------
 abc
(1 row)

=> SELECT SUBSTRING('soupçon', 5, 2 USING CHARACTERS);
 substring
-----------
 ço
(1 row)

=> SELECT SUBSTRING('soupçon', 5, 2 USING OCTETS);
 substring
-----------
 ç
(1 row)

如果使用负数位置,则函数从不存在的位置开始。在此示例中,这表示从位置 -4 开始计数 8 个字符。因此,函数从空位置 -4 开始,并且计五个字符,包括同样为空的 0 位置。这将返回三个字符。

=> SELECT SUBSTRING('1234567890', -4, 8);
 substring
 -----------
 123
(1 row)