跳到主要内容

CONCAT

描述

CONCAT 函数用于将多个字符串按顺序连接成一个字符串。该函数支持可变数量的参数,是字符串处理中最基本和常用的函数之一。在数据拼接、报表生成、动态 SQL 构建等场景中广泛使用。需要注意的是,如果任一参数为 NULL,整个结果都将为 NULL。

语法

CONCAT(<expr> [, <expr> ...])

参数

参数说明
<expr>需要连接的字符串表达式,可以是字符串常量、列名或其他表达式。类型:VARCHAR

返回值

返回 VARCHAR 类型,表示所有参数连接后的字符串。

连接规则:

  • 按参数顺序依次连接字符串
  • 支持任意数量的参数(至少1个)
  • 支持 UTF-8 多字节字符的正确连接
  • 数字和其他类型会自动转换为字符串

特殊情况:

  • 如果任一参数为 NULL,返回 NULL(这是与 CONCAT_WS 的主要区别)
  • 如果没有参数,语法错误
  • 空字符串参数不影响连接结果
  • 支持与非字符串类型混合使用

示例

  1. 基本字符串连接
SELECT CONCAT('a', 'b'), CONCAT('a', 'b', 'c');
+------------------+-----------------------+
| CONCAT('a', 'b') | CONCAT('a', 'b', 'c') |
+------------------+-----------------------+
| ab | abc |
+------------------+-----------------------+
  1. NULL 值处理(关键特性)
SELECT CONCAT('a', NULL, 'c'), CONCAT('hello', NULL);
+------------------------+---------------------+
| CONCAT('a', NULL, 'c') | CONCAT('hello', NULL) |
+------------------------+---------------------+
| NULL | NULL |
+------------------------+---------------------+
  1. 空字符串处理
SELECT CONCAT('hello', '', 'world'), CONCAT('', 'test', '');
+-----------------------------+------------------------+
| CONCAT('hello', '', 'world') | CONCAT('', 'test', '') |
+-----------------------------+------------------------+
| helloworld | test |
+-----------------------------+------------------------+
  1. 数字与字符串混合
SELECT CONCAT('User', 123), CONCAT('Price: $', 99.99);
+---------------------+---------------------------+
| CONCAT('User', 123) | CONCAT('Price: $', 99.99) |
+---------------------+---------------------------+
| User123 | Price: $99.99 |
+---------------------+---------------------------+
  1. 多个参数连接
SELECT CONCAT('A', 'B', 'C', 'D', 'E'), CONCAT('1', '2', '3', '4', '5');
+----------------------------------+----------------------------------+
| CONCAT('A', 'B', 'C', 'D', 'E') | CONCAT('1', '2', '3', '4', '5') |
+----------------------------------+----------------------------------+
| ABCDE | 12345 |
+----------------------------------+----------------------------------+
  1. UTF-8 多字节字符连接
SELECT CONCAT('ṭṛì', ' ', 'ḍḍumai'), CONCAT('Hello', ' ', 'ṭṛì', ' ', 'ḍḍumai');
+------------------------------+--------------------------------------+
| CONCAT('ṭṛì', ' ', 'ḍḍumai') | CONCAT('Hello', ' ', 'ṭṛì', ' ', 'ḍḍumai') |
+------------------------------+--------------------------------------+
| ṭṛì ḍḍumai | Hello ṭṛì ḍḍumai |
+------------------------------+--------------------------------------+
  1. 路径和URL构建
SELECT CONCAT('/home/', 'user/', 'file.txt'), CONCAT('https://', 'www.example.com', '/api');
+--------------------------------------+----------------------------------------------+
| CONCAT('/home/', 'user/', 'file.txt') | CONCAT('https://', 'www.example.com', '/api') |
+--------------------------------------+----------------------------------------------+
| /home/user/file.txt | https://www.example.com/api |
+--------------------------------------+----------------------------------------------+
  1. 电子邮件地址构建
SELECT CONCAT('user', '@', 'example.com'), CONCAT('admin.', 'support', '@', 'company.org');
+------------------------------------+-----------------------------------------------+
| CONCAT('user', '@', 'example.com') | CONCAT('admin.', 'support', '@', 'company.org') |
+------------------------------------+-----------------------------------------------+
| user@example.com | admin.support@company.org |
+------------------------------------+-----------------------------------------------+