REGEXP_SUBSTR提取逗号前数字异常:以0开头值提取错误
解决REGEXP_SUBSTR提取逗号前数字时0,1返回1的问题
直接修改正则表达式,加上开头锚点^,限定只匹配字符串开头到第一个逗号之间的内容:
SELECT REGEXP_SUBSTR(my_column, '^[^,]+', 1, 1) FROM myTable;
原因分析
原来的[^,]+没有限定匹配的起始位置,虽然指定了从第1个位置开始取第1个匹配项,但在某些场景下(比如数据存在隐藏前导字符、正则引擎匹配逻辑偏差),可能会错误匹配到逗号后的内容。加上^锚点后,正则会强制从字符串最开头开始匹配连续的非逗号字符,确保取到的是第一个逗号之前的所有内容,包括开头的0。
验证示例
- 输入
11,2→ 返回11 - 输入
5,2→ 返回5 - 输入
0,1→ 返回0
如果你的数据中逗号前有多余空白(比如 0,1),可以用TRIM()去掉前后空格:
SELECT TRIM(REGEXP_SUBSTR(my_column, '^[^,]+', 1, 1)) FROM myTable;
内容的提问来源于stack exchange,提问作者whatever
相关产品推荐
相关产品推荐

