Oracle如何编写正则表达式提取字符串中kV/KV标识前的数字
从device_name字段提取kV前数字的正则实现方案
核心正则规则
使用正则 (\d+)\s*[kK]V 即可满足需求,各部分含义:
(\d+):捕获组,匹配1个及以上连续数字,为最终需要提取的目标值\s*:匹配数字与kV/KV标识之间0个或多个空白字符,兼容有无空格的场景[kK]V:同时匹配大小写的kV标识
不同SQL方言的实现示例
MySQL 8.0+
SELECT REGEXP_SUBSTR(device_name, '(\\d+)\\s*[kK]V', 1, 1, 'c', 1) AS kv_value FROM 你的业务表名;
最后一个参数1代表取正则中第一个捕获组的内容。
PostgreSQL
SELECT substring(device_name FROM '(\d+)\s*[kK]V') AS kv_value FROM 你的业务表名;
Hive/Spark SQL
SELECT regexp_extract(device_name, '(\\d+)\\s*[kK]V', 1) AS kv_value FROM 你的业务表名;
匹配效果验证
针对你给出的三个测试样例,均可正确提取目标值:
- 样例1
15518 - 132 Garden Plain 138 kV l/o 0405→ 提取结果138 - 样例2
ALLENIM 345 KV ALL-RPM_I.→ 提取结果345 - 样例3
179 BLOO345 KV TR84CT-P_I.→ 提取结果345
内容的提问来源于stack exchange,提问作者Webb
相关产品推荐
相关产品推荐

