使用CONCAT()和CONCAT_WS()函数实现MySQL字符串拼接,前者用于常规拼接,后者可跳过NULL值并添加分隔符,避免结果为NULL,推荐优先使用以确保兼容性和正确性。

在 MySQL 中,字符串拼接不能使用像其他编程语言中的 + 或 || 符号,而是通过内置函数或操作符来实现。最常用的方式是使用 CONCAT() 函数。下面详细介绍如何进行字段拼接。
使用 CONCAT() 函数拼接字段
CONCAT() 是 MySQL 提供的专门用于连接字符串的函数,可以将两个或多个字段、字符串常量拼接成一个结果。
基本语法:
CONCAT(str1, str2, ...)
示例:假设有一张用户表 users,包含 first_name 和 last_name 两个字段,想将其拼接为完整姓名:
SELECT CONCAT(first_name, last_name) AS full_name FROM users;
如果希望中间加空格:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
处理 NULL 值:使用 CONCAT_WS()
当参与拼接的字段中可能包含 NULL 时,CONCAT() 的结果会变成 NULL。为避免这个问题,可以使用 CONCAT_WS(),它表示“带分隔符的字符串连接”。
语法:
CONCAT_WS(separator, str1, str2, ...)
第一个参数是分隔符,后续是需要拼接的字段。该函数会自动跳过 NULL 值。
例如:拼接地址信息,字段可能为空:
SELECT CONCAT_WS(', ', province, city, district, detail_address) AS full_address FROM user_address;
即使某个字段为 NULL,也不会影响整体拼接结果。
直接使用 || 操作符?注意 SQL 模式
在标准 SQL 中,|| 是字符串连接操作符,但在默认的 MySQL 配置中,|| 被解释为逻辑或(OR),不是拼接操作。
只有在开启了 PIPES_AS_CONCAT 模式后,|| 才能作为拼接符使用。不推荐依赖此方式,因为可移植性差且容易出错。
建议始终使用 CONCAT() 或 CONCAT_WS() 来保证兼容性和可读性。
实际应用场景举例
常见用途包括:
- 姓名拼接:姓 + 名
- 地址组合:省 + 市 + 区 + 街道
- 生成描述性字段:如 "订单编号:" + order_id
- URL 拼接:域名 + 路径
例如:
SELECT CONCAT('https://example.com/user/', user_id) AS profile_url FROM users;
基本上就这些。用好 CONCAT() 和 CONCAT_WS() 就能满足大多数字符串拼接需求。关键是注意 NULL 值处理和分隔符使用。










