SQL中的字符串处理函数能够帮助开发者快速完成字符串的裁剪、替换、拼接等操作,其中SUBSTRING和REPLACE是日常开发中使用频率极高的两个函数,掌握它们的用法可以大幅提升字符串处理的效率。

SUBSTRING函数基础用法
SUBSTRING函数的作用是从字符串中截取指定位置和长度的子字符串,不同数据库中的语法略有差异,但核心逻辑一致。
通用语法
大部分数据库支持以下语法格式:
-- 语法:SUBSTRING(原始字符串, 起始位置, 截取长度)
-- 起始位置从1开始计数,截取长度可选,不填则截取到字符串末尾
SELECT SUBSTRING('hello_world', 1, 5) AS result;
-- 返回结果:hello
不同数据库的差异
部分数据库有专属的截取函数,用法和SUBSTRING类似:
- MySQL支持
SUBSTR()作为SUBSTRING的别名,用法完全一致 - SQL Server中可以使用
SUBSTRING(),也支持LEFT()和RIGHT()截取左右侧字符串 - Oracle中除了
SUBSTR(),还可以用SUBSTRB()按字节截取字符串
REPLACE函数基础用法
REPLACE函数的作用是替换字符串中指定的子字符串,所有匹配的内容都会被替换,语法相对统一。
通用语法
几乎所有数据库都支持以下标准语法:
-- 语法:REPLACE(原始字符串, 被替换的字符串, 替换后的字符串)
SELECT REPLACE('hello_world', 'world', 'sql') AS result;
-- 返回结果:hello_sql
如果被替换的字符串在原始字符串中不存在,函数会直接返回原始字符串,不会报错。
组合使用场景示例
实际业务中经常会需要同时使用这两个函数,比如处理带固定格式的字符串:
场景1:截取并替换手机号中间四位
假设需要将手机号13812345678的中间四位替换为星号,可以先截取前后部分,再拼接替换后的内容:
-- 先截取前3位,再截取后4位,中间拼接****
SELECT CONCAT(
SUBSTRING('13812345678', 1, 3),
'****',
SUBSTRING('13812345678', 8)
) AS masked_phone;
-- 返回结果:138****5678
场景2:清理字符串中的特殊字符
如果字符串中包含不需要的横线,可以先截取需要的部分,再替换残留的特殊字符:
-- 原始字符串为user_123-456,需要截取user_之后的部分,再去掉横线
SELECT REPLACE(
SUBSTRING('user_123-456', 6),
'-',
''
) AS clean_id;
-- 返回结果:123456
注意事项
- SUBSTRING的起始位置如果小于1,不同数据库的处理逻辑不同,MySQL会返回空字符串,Oracle会从字符串开头开始截取,建议统一从1开始计数
- REPLACE函数区分大小写,比如替换'Hello'和'hello'是不同的操作,如果需要不区分大小写替换,可以结合
LOWER()或UPPER()函数使用 - 如果处理的字符串为NULL,两个函数的返回结果都为NULL,使用前可以先通过
COALESCE()函数处理空值
字符串处理时如果遇到复杂逻辑,可以先将中间结果通过临时表或子查询存储,再逐步处理,避免嵌套过多函数导致可读性下降。