SQL中字符串拼接最稳妥方式是CONCAT函数,它自动跳过NULL值;MySQL 8.0+还支持CONCAT_WS实现带分隔符的简洁拼接,各数据库对CONCAT兼容性良好但细节略有差异。

SQL 中字符串拼接最常用、最稳妥的方式是使用 CONCAT 函数,它能自动跳过 NULL 值,避免结果变 NULL,比用 + 或 || 更安全可靠。
CONCAT 基本写法与 NULL 处理
CONCAT 可接受多个参数,把它们按顺序连成一个字符串。关键优势是:任意参数为 NULL 时,该 NULL 被忽略,不中断整个拼接。
例如:
SELECT CONCAT('姓名:', name, ',年龄:', age) FROM users;若某条记录的 name 是 NULL,用 +(如 SQL Server)或 ||(如 Oracle/PostgreSQL)会导致整条结果为 NULL;而 CONCAT 会返回 ',年龄:25' —— 虽然不完美,但至少保留了有效信息。
MySQL 8.0+ 支持 CONCAT_WS:带分隔符的一站式拼接
CONCAT_WS(WS = With Separator)更实用:第一个参数是分隔符,后面所有参数自动用它连接,且仍跳过 NULL。
- 写法简洁:CONCAT_WS(' - ', name, city, phone)
- 如果 city 是 NULL,结果类似 '张三 - 138****1234',不会多出多余的分隔符
- 比反复写 CONCAT(a, '-', b, '-', c) 更清晰、易维护
兼容性考虑:不同数据库的写法差异
CONCAT 在 MySQL、PostgreSQL(9.1+)、SQL Server(2012+)中都支持,但细节有别:
- MySQL:原生支持 CONCAT 和 CONCAT_WS,推荐优先使用
- PostgreSQL:CONCAT 同样跳过 NULL;也可用 || 运算符,但需配合 COALESCE(col, '') 防 NULL 中断
- SQL Server:CONCAT 自 2012 起可用;老版本只能用 + ,必须搭配 ISNULL() 或 COALESCE()
实际场景中的小技巧
拼接常用于生成展示字段、导出标识、日志内容等,注意几个实用点:
- 数值类型要显式转字符串:用 CAST(age AS CHAR) 或 CONVERT(VARCHAR, age),否则某些库会报错
- 避免重复空格:拼接前用 TRIM() 清理字段两端空格,尤其来自用户输入的字段
- 条件拼接(如“男/女”后加括号备注):可嵌套 CASE WHEN,再整体进 CONCAT,逻辑更清晰










