You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:02:33