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

如何在MySQL中从字符串里提取纯数字序列?

MySQL提取remarks列中的数字部分解决方案

问题分析

你之前用regexp_substr只得到第一个匹配的数字片段,是因为该函数默认仅返回第一个符合正则的子串,没法一次性提取所有数字部分并拼接成预期格式。

解决方案(MySQL 8.0+)

用REGEXP_REPLACE函数直接替换字符串中所有非数字、非逗号的字符为空,就能得到目标结果:

SELECT remarks, REGEXP_REPLACE(remarks, '[^0-9,]', '') AS extracted_numbers
FROM your_table_name;

效果说明

针对示例数据Will0017,Will0018, Kind0045 , DGRG0012,这条语句会:

  • 移除所有字母(比如Will、Kind、DGRG)
  • 移除所有空格
  • 保留逗号和数字,最终输出0017,0018,0045,0012

低版本兼容方案(MySQL < 8.0)

如果你的MySQL版本不支持REGEXP_REPLACE,可以创建自定义函数遍历字符串提取数字:

DELIMITER //
CREATE FUNCTION extract_numbers(str VARCHAR(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(255) DEFAULT '';
    DECLARE i INT DEFAULT 1;
    DECLARE len INT DEFAULT LENGTH(str);
    DECLARE char CHAR(1);
    WHILE i <= len DO
        SET char = SUBSTRING(str, i, 1);
        IF char IN ('0','1','2','3','4','5','6','7','8','9', ',') THEN
            SET result = CONCAT(result, char);
        END IF;
        SET i = i + 1;
    END WHILE;
    -- 清理多余逗号
    SET result = TRIM(BOTH ',' FROM result);
    SET result = REGEXP_REPLACE(result, ',+', ',');
    RETURN result;
END //
DELIMITER ;

调用函数查询:

SELECT remarks, extract_numbers(remarks) AS extracted_numbers
FROM your_table_name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:12:18