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中的位置,存在则返回索引,否则返回0CASE语句:根据字段中存在的标识(id=或examno=)计算数字的起始位置(id=加3个字符长度,examno=加6个字符长度)INSTR(col2, ','):找到第一个逗号的位置,减去起始位置就是要提取的数字长度,最后用SUBSTRING截取对应内容
这两种方案都能得到你期望的输出结果,根据你的MySQL版本选择即可。
内容的提问来源于stack exchange,提问作者kenneth_oe
相关产品推荐
相关产品推荐

