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

PostgreSQL验证电话号码格式的SQL实现求助

解决方案

你的现有SQL存在几个问题:

  • 未锚定正则的开头和结尾,可能导致部分匹配的错误判断
  • 误用了LIKE的通配符%而非正则语法匹配分机号
  • 未处理电话号码末尾的空白字符(如ID 1234560的末尾空格)

修正后的SQL如下:

with t (id,telephone) as (values
(1234560,'(345) 908-1234 '),
(1234561,'(345) 908-1234;ext=1234'),
(1234562 ,'(345) 908-1234;ext=12345'),
(1234563 ,'(345) 908-12345;ext=12345'),
(1234564 ,'1234567;ext=12345'),
(1234565 ,'123ABC;ext=12345'),
(1234566 ,'Ext=12345'),
(1234567 ,'+1123456789')
)
select ID,
TELEPHONE,
case 
  when TELEPHONE similar to '^\(\d{3}\) \d{3}-\d{4}\s*$' then 0
  when TELEPHONE similar to '^\(\d{3}\) \d{3}-\d{4};ext=\d+\s*$' then 0
  else 1
end as TEL_IND
from t;

关键修正说明:

  • 用^和$锚定正则的开头与结尾,确保整个字符串完全符合格式要求
  • 用\d+匹配分机号的任意位数数字(替代错误的%)
  • 添加\s*允许电话号码末尾存在任意数量的空白字符,兼容ID 1234560的情况
  • 严格匹配小写的ext,符合你指定的有效格式规则

执行后会正确标记ID 1234560、1234561、1234562为有效(TEL_IND=0),其余为无效(TEL_IND=1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:26