SQL文本处理核心函数为TRIM、LOWER、UPPER、CONCAT、SUBSTRING和REPLACE,覆盖清洗、格式化、拼接、截取、替换等80%以上场景:TRIM去首尾空格或指定字符;LOWER/UPPER统一大小写便于比对;CONCAT安全拼接并跳过NULL;SUBSTRING从1开始截取结构化信息;REPLACE批量修正内容。

SQL中处理文本最常用、最实用的字符串函数,核心就集中在 TRIM、LOWER、UPPER、CONCAT、SUBSTRING 和 REPLACE 这几个上。它们覆盖了清洗、格式化、拼接、截取、替换等绝大多数日常需求,掌握好就能应对80%以上的字符串操作场景。
去空格:TRIM 是首选,但要注意细节
TRIM() 默认去掉字符串首尾的空格,简洁安全:
- 写法:
TRIM(' hello ')→ 返回'hello' - 支持指定字符:
TRIM('x' FROM 'xxabcxx')→ 返回'abc' - 注意:只处理开头和结尾,中间的空格或指定字符完全保留
- 兼容性好,MySQL、PostgreSQL、SQL Server(2017+)、Oracle 都原生支持
大小写转换:LOWER 和 UPPER 最常用
这两个函数专一高效,只影响字母,数字和符号保持不变:
-
LOWER('MySQL 123!')→'mysql 123!' -
UPPER('hello WORLD')→'HELLO WORLD' - 常用于统一比对,比如:
WHERE LOWER(email) = LOWER('User@EXAMPLE.COM') - 注意大小写敏感的数据库(如默认配置的MySQL),不加LOWER/UPPER可能查不到数据
字符串拼接:优先用 CONCAT,慎用 ||
拼接姓名、编号、路径等是高频操作,推荐明确、稳定的写法:
-
CONCAT(first_name, ' ', last_name)—— 自动跳过 NULL 值(MySQL),但部分数据库(如 SQL Server)遇到 NULL 整体返回 NULL - 需要分隔符时可用
CONCAT_WS('-', a, b, c),自动忽略 NULL 并用 '-' 连接非空项 -
||在 PostgreSQL、Oracle 中直接可用,但在 MySQL 中默认是逻辑 OR,需开启模式才生效,跨库迁移易出错 - 实际建议:业务系统若涉及多数据库,坚持用 CONCAT;单 PostgreSQL 环境可选 ||,更简洁
截取与替换:SUBSTRING 和 REPLACE 解决结构化提取
从不规范字段里“抠”信息,这两个函数最管用:
-
SUBSTRING(phone, 1, 3)提取手机号前三位;SUBSTRING(email, INSTR(email, '@') + 1)提取邮箱域名(MySQL) -
REPLACE(description, '旧型号', '新型号')批量修正文本内容 - 注意起始位置:SUBSTRING 多数数据库从 1 开始计数(不是 0),写成
SUBSTRING(str, 0, 5)可能返回空或报错 - SQL Server 用
SUBSTRING(str, start, len),MySQL 和 PostgreSQL 也兼容该写法,通用性强
基本上就这些。TRIM 清理脏数据,LOWER/UPPER 统一比较基准,CONCAT 拼装结果,SUBSTRING 和 REPLACE 处理结构提取与纠错——五类函数配合使用,就能稳稳撑起日常SQL文本处理的全部骨架。










