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

MySQL:如何创建存储过程通过正则表达式从Score列取值并设置S列的值

实现正则匹配更新列值的存储过程方案

当然可以实现这个需求!下面我会给出适配MySQL的存储过程实现,完全贴合你给出的匹配规则和数据场景:

原始数据

ScoreS
0 / 64
10/64
NF

期望结果

ScoreS
0 / 640
10/6410
NFNULL

存储过程实现

DELIMITER //

CREATE PROCEDURE UpdateScoreToS()
BEGIN
    UPDATE your_table_name
    SET S = CASE
        -- 匹配带/的分数格式,提取数字部分
        WHEN Score REGEXP '\\s*[0-9]+\\s*/' THEN REGEXP_SUBSTR(Score, '\\s*([0-9]+)\\s*/', 1, 1, '', 1)
        -- 匹配NF时设置为NULL
        WHEN Score = 'NF' THEN NULL
        -- 其他情况保留原S值(可根据需求调整)
        ELSE S
    END;
END //

DELIMITER ;

关键说明

  • 请将代码中的your_table_name替换为你实际使用的表名
  • 我把正则里的[0-9]*改成了[0-9]+,避免匹配到空数字(比如如果Score是 /64这种无效值,会返回NULL而不是空字符串,更贴合实际需求)
  • MySQL的REGEXP_SUBSTR函数最后一个参数1表示提取第一个捕获组的内容,正好对应你正则里括号包裹的数字部分
  • 执行存储过程的命令:CALL UpdateScoreToS();

如果你的数据库是其他类型(比如PostgreSQL、SQL Server),正则函数会有差异,比如PostgreSQL可以用substring(Score FROM '\\s*([0-9]+)\\s*/')来实现相同的提取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:47:36