MySQL中CONCAT()函数用于连接两个或多个字符串,若任一参数为NULL则结果为NULL;常用替代方案包括CONCAT_WS(跳过NULL)和IFNULL/COALESCE(预处理NULL);可与UPPER、DATE_FORMAT等函数组合使用,但需注意隐式类型转换及索引失效风险。

MySQL 中的 CONCAT() 函数用于将两个或多个字符串连接成一个字符串,是日常开发中最常用的字符串处理函数之一。
基本语法与简单拼接
CONCAT() 接收一个或多个参数,每个参数可以是字符串、列名、表达式或 NULL。只要有一个参数为 NULL,整个结果就返回 NULL(这点需特别注意)。
- 语法: CONCAT(str1, str2, ..., strN)
- 示例: SELECT CONCAT('Hello', ' ', 'World'); → 返回 'Hello World'
- 拼接字段: SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
处理 NULL 值:用 CONCAT_WS 或 IFNULL 替代
直接用 CONCAT 拼接含 NULL 的字段时,结果会变成 NULL。常见解决方式有两种:
-
用 CONCAT_WS(带分隔符拼接): 它会自动跳过 NULL 值,只拼接非 NULL 参数。
SELECT CONCAT_WS('-', 'A', NULL, 'C'); → 返回 'A-C' -
用 IFNULL/COALESCE 预处理: 把 NULL 转为空字符串再拼接。
SELECT CONCAT(IFNULL(name, ''), '(', IFNULL(phone, ''), ')') FROM contacts;
与其它函数配合使用
CONCAT 常和大小写、截取、格式化等函数组合使用,增强灵活性:
- 转大写后拼接: SELECT CONCAT(UPPER(city), ', ', country) FROM locations;
- 拼接带格式的日期: SELECT CONCAT('订单日期:', DATE_FORMAT(order_time, '%Y年%m月%d日')) FROM orders;
- 生成邮箱地址: SELECT CONCAT(LOWER(username), '@example.com') AS email FROM users;
注意事项与常见陷阱
使用 CONCAT 时容易忽略但影响结果的细节:
- 所有参数会被隐式转为字符串;数字 123 会变成 '123',但布尔值 TRUE/FALSE 转为 1/0
- 空字符串 '' 和 NULL 不同:CONCAT('a', '') 返回 'a',而 CONCAT('a', NULL) 返回 NULL
- 在 WHERE 或 ORDER BY 中慎用 CONCAT,可能使索引失效(如 WHERE CONCAT(first_name, last_name) = 'JohnDoe')










