CONCAT
描述
CONCAT 函数用于将多个字符串按顺序连接成一个字符串。该函数支持可变数量的参数,是字符串处理中最基本和常用的函数之一。在数据拼接、报表生成、动态 SQL 构建等场景中广泛使用。需要注意的是,如果任一参数为 NULL,整个结果都将为 NULL。
语法
CONCAT(<expr> [, <expr> ...])
参数
| 参数 | 说明 |
|---|---|
<expr> | 需要连接的字符串表达式,可以是字符串常量、列名或其他表达式。类型:VARCHAR |
返回值
返回 VARCHAR 类型,表示所有参数连接后的字符串。
连接规则:
- 按参数顺序依次连接字符串
- 支持任意数量的参数(至少1个)
- 支持 UTF-8 多字节字符的正确连接
- 数字和其他类型会自动转换为字符串
特殊情况:
- 如果任一参数为 NULL,返回 NULL(这是与 CONCAT_WS 的主要区别)
- 如果没有参数,语法错误
- 空字符串参数不影响连接结果
- 支持与非字符串类型混合使用
示例
- 基本字符串连接
SELECT CONCAT('a', 'b'), CONCAT('a', 'b', 'c');
+------------------+-----------------------+
| CONCAT('a', 'b') | CONCAT('a', 'b', 'c') |
+------------------+-----------------------+
| ab | abc |
+------------------+-----------------------+
- NULL 值处理(关键特性)
SELECT CONCAT('a', NULL, 'c'), CONCAT('hello', NULL);
+------------------------+---------------------+
| CONCAT('a', NULL, 'c') | CONCAT('hello', NULL) |
+------------------------+---------------------+
| NULL | NULL |
+------------------------+---------------------+
- 空字符串处理
SELECT CONCAT('hello', '', 'world'), CONCAT('', 'test', '');
+-----------------------------+------------------------+
| CONCAT('hello', '', 'world') | CONCAT('', 'test', '') |
+-----------------------------+------------------------+
| helloworld | test |
+-----------------------------+------------------------+
- 数字与字符串混合
SELECT CONCAT('User', 123), CONCAT('Price: $', 99.99);
+---------------------+---------------------------+
| CONCAT('User', 123) | CONCAT('Price: $', 99.99) |
+---------------------+---------------------------+
| User123 | Price: $99.99 |
+---------------------+---------------------------+
- 多个参数连接
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 |
+----------------------------------+----------------------------------+
- UTF-8 多字节字符连接
SELECT CONCAT('ṭṛì', ' ', 'ḍḍumai'), CONCAT('Hello', ' ', 'ṭṛì', ' ', 'ḍḍumai');
+------------------------------+--------------------------------------+
| CONCAT('ṭṛì', ' ', 'ḍḍumai') | CONCAT('Hello', ' ', 'ṭṛì', ' ', 'ḍḍumai') |
+------------------------------+--------------------------------------+
| ṭṛì ḍḍumai | Hello ṭṛì ḍḍumai |
+------------------------------+--------------------------------------+
- 路径和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 |
+--------------------------------------+----------------------------------------------+
- 电子邮件地址构建
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 |
+------------------------------------+-----------------------------------------------+