- 类别:
:doc:`/sql-reference/functions-string`(匹配/比较)
SUBSTR、SUBSTRING¶
返回 base_expr
中的字符串或二进制值的部分,从 start_expr
指定的字符/字节开始,并且可选择限制长度。
这些函数为同义函数。
语法¶
SUBSTR( <base_expr>, <start_expr> [ , <length_expr> ] )
SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )
实参¶
base_expr
这必须是
VARCHAR
或BINARY
值。start_expr
起始位置应该是一个计算结果为整数的表达式。它指定子字符串的起始偏移量。偏移量通过以下数量来测量:
UTF-8 字符数(如果输入为
VARCHAR
)。字节数(如果输入为
BINARY
)。
起始位置从 1 而不是 0 开始。
SUBSTR('abc', 1, 1)
返回“a”而不是“b”。length_expr
长度应该是一个计算结果为整数的表达式。它应该指定:
如果输入为
VARCHAR
,返回的 UTF-8 字符数。如果输入为
BINARY
,返回的字节数。
长度应大于或等于零。如果长度为负数,该函数会返回一个空字符串。
返回¶
返回值的数据类型与 base_expr
的数据类型(BINARY
或 VARCHAR
)相同。
使用说明¶
如果使用
length_expr
,则最多返回length_expr
个字符/字节,否则返回字符串或二进制值末尾之前的所有字符。start_expr
中的值从 1 开始:如果指定 0,则将其视为 1。
如果指定了负值,则起始位置计算为从字符串或二进制值末尾开始的
start_expr
个字符/字节。如果位置超出字符串或二进制值的范围,则返回空值。
如果任何输入为 NULL,则返回 NULL。
排序规则详细信息¶
排序规则适用于
VARCHAR
输入。如果第一个参数的输入数据类型为BINARY
,则排序规则不适用。No impact. 尽管在语法上可以接受排序规则,但排序规则对处理没有影响。例如,某些语言的字母包含两个字符或三个字符(如匈牙利语中的“dzs”,捷克语中的“ch”),这些字母作为长度实参时仍会算作两个或三个字符(而不是一个字符)。
The collation of the result is the same as the collation of the input. 如果返回值作为嵌套函数调用的一部分传递给另一个函数,这可能很有用。
示例¶
SELECT SUBSTR('testing 1 2 3', 9, 5) FROM x;
-------------------------------+
substr('testing 1 2 3', 9, 5) |
-------------------------------+
1 2 3 |
-------------------------------+
SELECT '123456', pos, len, SUBSTR('123456', pos, len) FROM o;
----------+--------+-----+----------------------------+
'123456' | pos | len | substr('123456', pos, len) |
----------+--------+-----+----------------------------+
123456 | -1 | 3 | 6 |
123456 | -3 | 3 | 456 |
123456 | -3 | 7 | 456 |
123456 | -5 | 3 | 234 |
123456 | -7 | 3 | |
123456 | 0 | 3 | 123 |
123456 | 0 | 7 | 123456 |
123456 | 1 | 3 | 123 |
123456 | 3 | 3 | 345 |
123456 | 3 | 7 | 3456 |
123456 | 5 | 3 | 56 |
123456 | 5 | 7 | 56 |
123456 | 7 | 3 | |
123456 | [NULL] | 3 | [NULL] |
123456 | [NULL] | 7 | [NULL] |
----------+--------+-----+----------------------------+