本文共 2126 字,大约阅读时间需要 7 分钟。
CONCAT() 和 GROUP_CONCAT() 是 MySQL 中常用的字符串连接函数,用于将多个字符串或字段值连接成一个单一的字符串。以下是两者功能的详细说明及使用示例。
CONCAT() 函数用于将多个字符串或字段值连接成一个单一的字符串。它的主要特点包括:
NULL
,则返回 NULL
。示例:
SELECT CONCAT(id, ‘,’, name) AS con FROM info LIMIT 1;
返回结果为:
| con | |----|| 1,BioCyc |
另一个示例:
SELECT CONCAT(‘My’, NULL, ‘QL’);
返回结果为:
| CONCAT('My', NULL, 'QL') ||--------------------------|| NULL |
GROUP_CONCAT() 函数用于将同一组数据中的记录连接成一个字符串。它常用于需要对多个字段进行汇总或展示的场景。其语法及使用特点如下:
,
。ORDER BY
子句对结果进行排序。DISTINCT
关键字可以去重。示例:
SELECT locus, GROUP_CONCAT(id) FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;
返回结果为:
| locus | GROUP_CONCAT(id) ||-------|------------------|| AB086827 | 1,2 || AF040764 | 23,24 |
通过使用 DISTINCT
关键字可以去重:
SELECT locus, GROUP_CONCAT(DISTINCT id ORDER BY id DESC SEPARATOR '_') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;
返回结果为:
| locus | GROUP_CONCAT(DISTINCT id ORDER BY id DESC SEPARATOR '_') ||-------|------------------------------------------------------|| AB086827 | 2_1 || AF040764 | 24_23 |
通过 SEPARATOR
选项可以自定义分隔符:
SELECT locus, GROUP_CONCAT(concat_ws(', ', id, journal) ORDER BY id DESC SEPARATOR '. ') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;
返回结果为:
| locus | GROUP_CONCAT(concat_ws(', ', id, journal) ORDER BY id DESC SEPARATOR '. ') ||-------|-----------------------------------------------------------------------------|| AB086827 | 2, Submitted (20-JUN-2002). 1, Unpublished || AF040764 | 24, Submitted (31-DEC-1997). 23, Unpublished |
为了避免结果过长,可以通过设置 group_concat_max_len
参数来限制最大长度:
SET @@global.group_concat_max_len = 40000;
这样可以确保结果不会超出预定的长度限制。
转载地址:http://dvbfk.baihongyu.com/