如何在Snowflake中提取字符串中长度恰好为10位的数字
在Snowflake中提取恰好10位的数字
如果需要从字符串中仅提取长度严格为10位的数字(长度不足或超过10位的数字完全忽略),可以通过精准的正则匹配来实现,避免从更长的数字串中误截取部分内容。
示例情况
- 符合提取条件:
Asfsdfdsfd 1234567890→ 提取1234567890 - 不符合提取条件:
Asfsdfdsfd 1234567890123→ 不提取任何数字
注意原参考SQL的缺陷
你提供的参考语句:
select regexp_substr('asfsdfdsfd 123456789001', '[0-9]{10}') as extracted_digits where extracted_digits REGEXP '[0-9]{10}';
存在问题:如果字符串包含超过10位的数字(比如示例中的12位数字),它会截取前10位返回,不符合“仅提取恰好10位数字”的要求。
正确解决方案SQL
方法1:先过滤再提取
SELECT REGEXP_SUBSTR(your_column, '\\d{10}') AS extracted_digits FROM your_table WHERE your_column REGEXP '(^|\\D)\\d{10}(\\D|$)';
方法2:利用捕获组直接返回纯数字
SELECT REGEXP_SUBSTR(your_column, '(^|\\D)(\\d{10})(\\D|$)', 1, 1, 'e', 2) AS extracted_digits FROM your_table WHERE REGEXP_SUBSTR(your_column, '(^|\\D)(\\d{10})(\\D|$)', 1, 1, 'e', 2) IS NOT NULL;
正则逻辑说明
(^|\\D):匹配字符串开头或任意非数字字符,确保目标数字不是更长数字串的前缀\\d{10}:精准匹配恰好10位数字(\\D|$):匹配任意非数字字符或字符串结尾,确保目标数字不是更长数字串的后缀- 方法2中的
'e', 2参数指定返回第2个捕获组的内容(即纯10位数字),无需额外处理前后的非数字字符
内容的提问来源于stack exchange,提问作者Manideep
相关产品推荐
相关产品推荐

