在MySQL日常开发中,把字段或常量拼接成字符串是高频操作。不同业务场景适合用不同的拼接函数,选错方式可能导致结果为空或格式混乱。下面通过具体示例看看常见写法。

一、CONCAT函数基础用法
CONCAT用于把多个字符串参数直接连接。需要注意的是,只要任意一个参数为NULL,返回结果就是NULL。
-- 拼接用户名和邮箱,中间不加分隔 SELECT CONCAT(user_name, email) AS info FROM users WHERE id = 1; -- 如果email为NULL,上面的结果会是NULL -- 可以用IFNULL处理 SELECT CONCAT(user_name, IFNULL(email, '')) AS info FROM users WHERE id = 1;
二、CONCAT_WS指定分隔符
CONCAT_WS第一个参数是分隔符,后面是要拼接的值。它会自动跳过NULL,不会因某个字段为空就让整段消失。
-- 用横杠拼接省、市、区,NULL值会被忽略
SELECT CONCAT_WS('-', province, city, district) AS addr
FROM user_address
WHERE user_id = 10;
三、GROUP_CONCAT分组拼接
当想把同一组下的多行某列拼成一行时,GROUP_CONCAT非常方便,还能排序和换分隔符。
-- 把每个部门的员工姓名拼成逗号分隔的一行
SELECT dept_id,
GROUP_CONCAT(emp_name ORDER BY emp_name SEPARATOR ',') AS emp_list
FROM employees
GROUP BY dept_id;
四、常见注意点
- CONCAT遇NULL全空,重要字段建议用IFNULL包一层。
- CONCAT_WS更适合带分隔的拼接,写报表地址、标签时很好用。
- GROUP_CONCAT默认长度有限制,数据多时可调group_concat_max_len。
- 拼接数字会自动转字符串,但跨字符集字段拼接待确认编码一致。
小结对照表
| 函数 | 是否忽略NULL | 典型场景 |
|---|---|---|
| CONCAT | 否 | 简单固定拼接 |
| CONCAT_WS | 是 | 带分隔符拼接 |
| GROUP_CONCAT | 多行合一 | 分组聚合拼字符串 |
掌握这三种拼接语句,基本能覆盖大部分MySQL文本拼接需求。实际写的时候先想清楚要不要分隔、会不会遇NULL,再选对应函数即可。