在SQL数据处理场景中,截取字符串是非常高频的操作,不同数据库都提供了对应的内置函数来实现这一需求,下面介绍几种最常用的截取字符串函数及其用法。

SUBSTRING函数
SUBSTRING是大部分数据库都支持的通用截取函数,用于从指定位置开始截取指定长度的字符串,语法如下:
-- 通用语法 SUBSTRING(原字符串, 起始位置, 截取长度) -- 起始位置从1开始计数,截取长度可选,不填则截取到字符串末尾
下面是具体的使用示例:
-- 从字符串'HelloWorld'的第2位开始,截取3个字符,结果为'ell'
SELECT SUBSTRING('HelloWorld', 2, 3) AS result;
-- 从字符串'20240520'的第1位开始,截取到末尾,结果为'20240520'
SELECT SUBSTRING('20240520', 1) AS result;
LEFT函数
LEFT函数用于从字符串的左侧开始截取指定长度的字符,适合需要提取前缀的场景,语法如下:
LEFT(原字符串, 截取长度)
使用示例:
-- 截取手机号前三位,假设手机号是'13812345678',结果为'138'
SELECT LEFT('13812345678', 3) AS phone_prefix;
-- 截取字符串'SQL教程'的前2个字符,结果为'SQL'
SELECT LEFT('SQL教程', 2) AS result;
RIGHT函数
RIGHT函数和LEFT函数对应,用于从字符串的右侧开始截取指定长度的字符,适合提取后缀的场景,语法如下:
RIGHT(原字符串, 截取长度)
使用示例:
-- 截取身份证最后4位,假设身份证是'110101199001011234',结果为'1234'
SELECT RIGHT('110101199001011234', 4) AS id_suffix;
-- 截取文件名后缀,假设文件名是'test.sql',结果为'sql'
SELECT RIGHT('test.sql', 3) AS file_ext;
不同数据库的差异说明
部分数据库对截取函数的支持有细微差异,具体可以参考下表:
| 数据库类型 | SUBSTRING函数别名 | 注意事项 |
|---|---|---|
| MySQL | 支持SUBSTR作为别名 | 起始位置可以为负数,表示从字符串末尾开始计数 |
| SQL Server | 支持SUBSTR作为别名 | 起始位置不能为负数 |
| Oracle | 支持SUBSTR作为别名 | 起始位置可以为负数,表示从末尾开始计数 |
使用注意事项
- 截取长度如果超过原字符串剩余长度,会返回从起始位置到字符串末尾的所有内容,不会报错。
- 起始位置如果小于1,不同数据库的处理方式不同,部分会返回空字符串,部分会从第一个字符开始截取。
- 如果原字符串为NULL,所有截取函数都会返回NULL。
实际使用中可以根据需求选择合适的截取函数,比如需要左侧前缀用LEFT,需要右侧后缀用RIGHT,需要中间任意位置的内容用SUBSTRING即可。