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

MySQL如何提取连字符后首字母并拼接成新列?

MySQL提取分隔字符串首字母并拼接的解决方案

针对无固定长度、以连字符-分隔的字符串,要提取首字符及每个分隔符后的首字符并拼接,可通过以下两种方案实现:

方案一:自定义函数(兼容所有MySQL版本)

创建自定义函数遍历字符串,收集目标字符:

DELIMITER //
CREATE FUNCTION get_initial_str(input_str VARCHAR(255)) 
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE result_str VARCHAR(255) DEFAULT '';
    DECLARE current_pos INT DEFAULT 1;
    DECLARE char_len INT DEFAULT LENGTH(input_str);
    
    -- 取第一个字符
    SET result_str = CONCAT(result_str, SUBSTRING(input_str, 1, 1));
    
    WHILE current_pos <= char_len DO
        IF SUBSTRING(input_str, current_pos, 1) = '-' AND current_pos < char_len THEN
            -- 取连字符后的第一个字符
            SET result_str = CONCAT(result_str, SUBSTRING(input_str, current_pos + 1, 1));
        END IF;
        SET current_pos = current_pos + 1;
    END WHILE;
    
    RETURN result_str;
END //
DELIMITER ;

使用示例:

-- 测试数据
SELECT get_initial_str('asdaff-asarger-adsf-tggdg') AS result; -- 输出 'aaat'
SELECT get_initial_str('jkl-jkui-kmj-iop-kiu') AS result; -- 输出 'jkjkki'

方案二:递归CTE(MySQL 8.0及以上版本)

无需创建函数,用递归公共表表达式拆分字符串并提取首字母:

WITH RECURSIVE str_parts AS (
    SELECT 
        input_str,
        SUBSTRING(input_str, 1, 1) AS initial,
        LOCATE('-', input_str) AS dash_pos
    FROM your_table
    UNION ALL
    SELECT
        SUBSTRING(input_str, dash_pos + 1),
        SUBSTRING(SUBSTRING(input_str, dash_pos + 1), 1, 1),
        LOCATE('-', SUBSTRING(input_str, dash_pos + 1))
    FROM str_parts
    WHERE dash_pos > 0
)
SELECT 
    GROUP_CONCAT(initial ORDER BY (SELECT NULL) SEPARATOR '') AS result
FROM str_parts;

替换your_table为实际表名,若要处理单条字符串,可将初始查询改为:

WITH RECURSIVE str_parts AS (
    SELECT 
        'asdaff-asarger-adsf-tggdg' AS input_str,
        SUBSTRING('asdaff-asarger-adsf-tggdg', 1, 1) AS initial,
        LOCATE('-', 'asdaff-asarger-adsf-tggdg') AS dash_pos
    UNION ALL
    SELECT
        SUBSTRING(input_str, dash_pos + 1),
        SUBSTRING(SUBSTRING(input_str, dash_pos + 1), 1, 1),
        LOCATE('-', SUBSTRING(input_str, dash_pos + 1))
    FROM str_parts
    WHERE dash_pos > 0
)
SELECT GROUP_CONCAT(initial ORDER BY (SELECT NULL) SEPARATOR '') AS result; -- 输出 'aaat'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:52:07