You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中为字符串的每个字符间添加逗号?

在MySQL中为字符串每个字符间添加逗号的实现方法

可以通过以下几种方式实现需求:

方法一:使用递归CTE(MySQL 8.0及以上版本支持)

递归CTE可逐个拆分字符串字符,再拼接成带逗号的格式:

WITH RECURSIVE split_chars AS (
    SELECT 
        id,
        name,
        1 AS pos,
        SUBSTRING(name, 1, 1) AS char_val
    FROM my_table
    UNION ALL
    SELECT 
        id,
        name,
        pos + 1,
        SUBSTRING(name, pos + 1, 1)
    FROM split_chars
    WHERE pos < LENGTH(name)
)
SELECT 
    id,
    GROUP_CONCAT(char_val SEPARATOR ',') AS name
FROM split_chars
GROUP BY id;

方法二:利用数字辅助表(兼容低版本MySQL)

若MySQL版本不支持递归CTE,可先创建包含连续数字的辅助表,再通过拆分拼接实现:

  1. 创建数字表:
CREATE TABLE nums (n INT PRIMARY KEY);
INSERT INTO nums VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); -- 可根据实际字符串长度扩展数字范围
  1. 执行查询:
SELECT 
    t.id,
    GROUP_CONCAT(SUBSTRING(t.name, n.n, 1) SEPARATOR ',') AS name
FROM my_table t
JOIN nums n ON n.n <= LENGTH(t.name)
GROUP BY t.id;

方法三:使用自定义函数

创建自定义函数直接处理字符串:

DELIMITER //
CREATE FUNCTION add_commas(str VARCHAR(255)) 
RETURNS VARCHAR(510)
DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(510) DEFAULT '';
    DECLARE len INT DEFAULT LENGTH(str);
    DECLARE i INT DEFAULT 1;
    WHILE i <= len DO
        SET result = CONCAT(result, SUBSTRING(str, i, 1));
        IF i < len THEN
            SET result = CONCAT(result, ',');
        END IF;
        SET i = i + 1;
    END WHILE;
    RETURN result;
END //
DELIMITER ;

调用函数查询:

SELECT id, add_commas(name) AS name FROM my_table;

结果验证

以你提供的my_table为例,执行任意一种方法后,得到结果如下:

idname
1h,e,l,l,o

内容的提问来源于stack exchange,提问作者SelVazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:30:36