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

MySQL如何从col2字段提取id/examno后的指定数字值?

在MySQL中提取指定区间内容的解决方案

当然可行!我们可以利用MySQL的字符串处理函数精准提取col2字段中id=或examno=后的数字内容,下面分两种版本给出具体实现方案:

方案一:MySQL 8.0及以上版本(推荐)

MySQL 8.0开始支持正则表达式的正向断言,用REGEXP_SUBSTR函数可以非常简洁地实现需求:

SELECT 
  col1,
  REGEXP_SUBSTR(col2, '(?<=id=|examno=)\\d+') AS col2
FROM your_table;

代码解释:

  • (?<=id=|examno=):正向预查断言,确保匹配的数字前面是id=或者examno=
  • \\d+:匹配连续的数字序列(也就是我们要提取的目标内容)
  • 这个函数会直接返回符合条件的数字部分,完美匹配你想要的输出效果

方案二:MySQL 5.x版本(兼容旧版本)

如果你的MySQL版本低于8.0,不支持正则断言,可以用INSTR+SUBSTRING的组合来实现:

SELECT
  col1,
  SUBSTRING(
    col2,
    -- 确定数字的起始位置
    CASE
      WHEN INSTR(col2, 'id=') > 0 THEN INSTR(col2, 'id=') + 3
      WHEN INSTR(col2, 'examno=') > 0 THEN INSTR(col2, 'examno=') + 6
    END,
    -- 确定要提取的数字长度(从起始位置到第一个逗号的距离)
    INSTR(col2, ',') - CASE
      WHEN INSTR(col2, 'id=') > 0 THEN INSTR(col2, 'id=') + 3
      WHEN INSTR(col2, 'examno=') > 0 THEN INSTR(col2, 'examno=') + 6
    END
  ) AS col2
FROM your_table;

代码解释:

  • INSTR(col2, 'id='):查找id=在col2中的位置,存在则返回索引,否则返回0
  • CASE语句:根据字段中存在的标识(id=或examno=)计算数字的起始位置(id=加3个字符长度,examno=加6个字符长度)
  • INSTR(col2, ','):找到第一个逗号的位置,减去起始位置就是要提取的数字长度,最后用SUBSTRING截取对应内容

这两种方案都能得到你期望的输出结果,根据你的MySQL版本选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:54:58