SELECT CONCAT('11','22','33'); -- 112233
SELECT CONCAT('11','22',NULL); -- NULL
與 Oracle CONCAT 僅支持兩參數且忽略 NULL 不同,MySQL 版本參數不限但「一 NULL 全 NULL」。
SELECT CONCAT_WS(',','11','22','33'); -- 11,22,33
SELECT CONCAT_WS(',','11','22',NULL); -- 11,22
WS = With Separator。首參數為分隔符,後續參數任意個,NULL 值被靜默忽略,極適合構建 CSV、標籤列表等場景。
-- 基礎語法
GROUP_CONCAT([DISTINCT] expr [ORDER BY ...] [SEPARATOR str])
| 需求 | SQL | 結果 |
|---|---|---|
| 分組拼接,默認逗號 | SELECT id, GROUP_CONCAT(name) FROM aa GROUP BY id; | 1 → 10,20,20 |
| 自定義分號分隔 | SELECT id, GROUP_CONCAT(name SEPARATOR ';') FROM aa GROUP BY id; | 1 → 10;20;20 |
| 去重拼接 | SELECT id, GROUP_CONCAT(DISTINCT name) FROM aa GROUP BY id; | 1 → 10,20 |
| 按 name 降序拼接 | SELECT id, GROUP_CONCAT(name ORDER BY name DESC) FROM aa GROUP BY id; | 1 → 20,20,10 |
注意:結果長度受 group_concat_max_len 限制(默認 1024 字節),大數據量場景需調大該變量。
SELECT REPEAT('ab',2); -- abab
SELECT REPEAT('a',2); -- aa
常用於生成測試數據、填充固定長度字符串等場景。