如何在mysql中进行字符串拼接_concat函数用法

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'