跳到主要内容
版本:Latest-3.2

substr, substring

功能

从一个字符串 (str) 的指定位置(pos) 开始截取指定长度 (len) 的字符。

  • 如果指定了 len 参数时,返回从位置 pos 开始的长度为 len 的子字符串。
  • 如果没有指定 len 参数,返回从位置 pos 开始的所有字符组成的字符串。

语法

VARCHAR substr(VARCHAR str, INT pos[, INT len]);

参数说明

  • str: 必选,支持的数据类型为 VARCHAR。

  • pos: 必选,支持的数据类型为 INT。

    • pos 可以使用负值,在这种情况下,从字符串 str 末尾从右往左开始计算 pos 个字符,见示例二。

    • 如果 pos 的值为 0,返回一个空字符串。

    • 如果指定的起始位置超出了字符串的位数范围,返回空字符串,见示例三。

    注:字符串中第一个字符的位置为 1。

  • len: 可选,支持的数据类型为 INT。如果不指定,默认返回 pos 后的所有字符。如果要返回的字符字数超出了实际匹配的字符个数,返回所有匹配的字符,见示例四。

返回值说明

返回值的数据类型为 VARCHAR。

示例

-- 返回 "starrocks" 字符串从第三位字符 "a" 开始的所有字符,未指定字符长度。
mysql> select substr("starrocks",3);
+------------------------+
| substr('starrocks', 3) |
+------------------------+
| arrocks |
+------------------------+
1 row in set (0.00 sec)

-- 返回 "starrocks" 字符串从右往左数第二位字符 "k" 开始的所有字符,未指定字符长度。
mysql> select substring("starrocks",-2);
+----------------------------+
| substring('starrocks', -2) |
+----------------------------+
| ks |
+----------------------------+
1 row in set (0.00 sec)

-- 指定的位数 8 超过了 "apple" 字符串的总位数,返回空字符串。
MySQL > select substring("apple", 8, 2);
+--------------------------------+
| substring('apple', 8, 2) |
+--------------------------------+
| |
+--------------------------------+

-- 返回 "apple" 字符串中从第一位字符开始的 9 个字符。9 超过了匹配的字符个数,返回所有匹配的字符。
MySQL > select substring("apple", 1, 9);
+--------------------------+
| substring('apple', 1, 9) |
+--------------------------+
| apple |
+--------------------------+