类别:

:doc:`/sql-reference/functions-string`(匹配/比较)

SUBSTR、SUBSTRING

返回 base_expr 中的字符串或二进制值的部分,从 start_expr 指定的字符/字节开始,并且可选择限制长度。

这些函数为同义函数。

另请参阅:

LEFTRIGHT

语法

SUBSTR( <base_expr>, <start_expr> [ , <length_expr> ] )

SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )
Copy

实参

base_expr

这必须是 VARCHARBINARY 值。

start_expr

起始位置应该是一个计算结果为整数的表达式。它指定子字符串的起始偏移量。偏移量通过以下数量来测量:

  • UTF-8 字符数(如果输入为 VARCHAR)。

  • 字节数(如果输入为 BINARY)。

起始位置从 1 而不是 0 开始。SUBSTR('abc', 1, 1) 返回“a”而不是“b”。

length_expr

长度应该是一个计算结果为整数的表达式。它应该指定:

  • 如果输入为 VARCHAR,返回的 UTF-8 字符数。

  • 如果输入为 BINARY,返回的字节数。

长度应大于或等于零。如果长度为负数,该函数会返回一个空字符串。

返回

返回值的数据类型与 base_expr 的数据类型(BINARYVARCHAR)相同。

使用说明

  • 如果使用 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]                     |
----------+--------+-----+----------------------------+
Copy
语言: 中文