Oracle SQL通过正则表达式提取符合规范格式的13位订单号的实现方法
从文本字段提取指定格式订单号的SQL实现方案
需求匹配规则
需要提取的订单号格式为:1位数字 + 连字符 + 11位数字,总长度13位,对应正则匹配规则为 \d-\d{11}。
各数据库实现代码
Oracle 数据库
你提供的测试用例使用了dual系统表,Oracle可直接用REGEXP_SUBSTR正则提取函数实现:
SELECT REGEXP_SUBSTR( 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Minima porro, hic deleniti pariatur quaerat eligendi mollitia 4-70000000000 (praesentium)', '\d-\d{11}' ) AS 标准订单号 FROM dual;
如果需要避免误截取更长数字串中的符合规则片段,可调整正则为(^|\D)\K\d-\d{11}(?=\D|$),确保匹配到的订单号前后都不是数字。
MySQL 数据库(8.0及以上版本)
SELECT REGEXP_SUBSTR( 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Minima porro, hic deleniti pariatur quaerat eligendi mollitia 4-70000000000 (praesentium)', '[0-9]-[0-9]{11}' ) AS 标准订单号;
低版本MySQL不支持正则提取函数,建议升级版本或在应用层做文本处理。
PostgreSQL 数据库
SELECT (regexp_match( 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Minima porro, hic deleniti pariatur quaerat eligendi mollitia 4-70000000000 (praesentium)', '\d-\d{11}' ))[1] AS 标准订单号;
如果需要提取文本中所有符合规则的订单号,可替换为regexp_matches函数返回所有匹配结果。
内容的提问来源于stack exchange,提问作者Vitor Oliveira
相关产品推荐
相关产品推荐

