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

Snowflake中REGEXP_LIKE匹配SSN格式失效问题求助(Oracle正则兼容)

Snowflake中REGEXP_LIKE匹配SSN格式的问题解决

你的问题源于Snowflake和Oracle使用的正则表达式语法差异:Oracle默认采用Perl兼容正则(PCRE),而Snowflake的REGEXP_LIKE遵循POSIX正则标准,这导致\d这类PCRE专属语法在Snowflake中无法被识别。

修正后的正则表达式

将\d替换为POSIX标准的数字匹配符[0-9](或[:digit:]),即可正常匹配两种SSN格式:

SELECT * FROM customers 
WHERE REGEXP_LIKE(PER_NUM, '^[0-9]{3}-?[0-9]{2}-?[0-9]{4}$');

或者使用POSIX字符类的写法:

SELECT * FROM customers 
WHERE REGEXP_LIKE(PER_NUM, '^[:digit:]{3}-?[:digit:]{2}-?[:digit:]{4}$');

优化版本(更清晰区分两种格式)

如果希望更明确地匹配两种独立格式(带连字符的11位和无连字符的9位),可以用分支结构:

SELECT * FROM customers 
WHERE REGEXP_LIKE(PER_NUM, '^([0-9]{3}-[0-9]{2}-[0-9]{4})$|^([0-9]{9})$');

测试验证

用你的测试数据执行修正后的SQL,会返回以下符合条件的记录:

  • account_number: 1589420(PER_NUM: '232-76-1119')
  • account_number: 2834123(PER_NUM: '434689191')
  • account_number: 4829381(PER_NUM: '223788145')
  • account_number: 9821802(PER_NUM: '123-73-3171')
  • account_number: 8028387(PER_NUM: '589-78-8239')

而PER_NUM为'1234567890'的10位数字记录会被正确排除,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:54:52