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

如何用SQL统计Snowflake中每个电话号码的唯一数字数量?

统计电话号码中的唯一数字数量

你当前使用的查询逻辑有误,LENGTH(phone_number) - LENGTH(REGEXP_REPLACE(phone_number, '[0-9]', '')) 实际是计算电话号码中数字的总个数,而非唯一数字的数量。比如对于号码9999999999,这个公式得到的结果是10,和你预期的1不符。

下面提供两种在Snowflake中实现需求的方法:

方法一:正则表达式去重后统计长度

利用正则匹配并移除重复出现的数字,再计算剩余字符串的长度:

SELECT phone_number,
       LENGTH(REGEXP_REPLACE(phone_number, '(.)(?=.*\\1)', '')) AS unique_digit_count
FROM phone_numbers;
  • 正则表达式(.)(?=.*\\1)的作用是:匹配任意字符(这里是数字),且该字符在后续位置还会重复出现,将这类重复字符替换为空,最终剩下的就是所有唯一出现的数字。

方法二:拆分字符后去重计数

通过SPLIT_TO_TABLE将电话号码拆分为单个字符的行,再分组统计不同字符的数量:

SELECT phone_number,
       COUNT(DISTINCT value) AS unique_digit_count
FROM phone_numbers,
     LATERAL SPLIT_TO_TABLE(phone_number, '')
GROUP BY phone_number;
  • 这种方法逻辑更直观,即使电话号码中包含非数字字符也能适配(不过你的场景中是纯数字号码,两种方法都适用)。

内容的提问来源于stack exchange,提问作者ice_cold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:03:13