CONCAT函数用于连接字符串,自动忽略NULL值;可用IFNULL或COALESCE处理NULL;支持跨类型拼接,建议显式转换;多字段拼接推荐使用CONCAT_WS避免多余分隔符。

在SQL中,CONCAT函数用于将两个或多个字符串(包括字段值)连接成一个字符串。不同数据库对CONCAT的支持略有差异,但主流用法一致。下面以实际场景说明如何正确使用。
基本语法与单行拼接
最简单的用法是把多个字段或字面量按顺序拼在一起:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
这会把first_name和last_name中间加空格合并显示。注意:CONCAT会自动忽略NULL值,比如CONCAT('A', NULL, 'C')结果是'AC',不是NULL。
处理NULL值的稳妥写法
虽然CONCAT本身跳过NULL,但如果想统一用空字符串代替NULL,可配合IFNULL(MySQL)或COALESCE(通用):
- MySQL:
CONCAT(IFNULL(middle_name, ''), ' ', last_name) - PostgreSQL/SQL Server:
CONCAT(COALESCE(middle_name, ''), ' ', last_name)
跨字段类型拼接(如数字+文本)
CONCAT通常自动转换非字符串类型(如整数、日期),但为防报错,建议显式转换:
- MySQL:
CONCAT(name, ' - ID:', CAST(id AS CHAR)) - PostgreSQL:
name || ' - ID:' || id::TEXT(也可用||操作符替代CONCAT) - SQL Server:
CONCAT(name, ' - ID:', id)(自动转字符串)
多字段动态拼接与分隔符控制
若需在多个字段间加固定分隔符(如逗号),可嵌套使用:
SELECT CONCAT(
first_name,
COALESCE(CONCAT(', ', middle_name), ''),
COALESCE(CONCAT(' ', last_name), '')
) AS name_display FROM people;这样能避免因中间名为空导致多余逗号或空格。更简洁的方式是用CONCAT_WS(MySQL/PostgreSQL支持):
SELECT CONCAT_WS(' ', first_name, middle_name, last_name) FROM people;它自动跳过NULL,并用第一个参数作为分隔符,不加额外空格。

















