核查电话号码列格式正确性的SQL查询问题求助
核查电话号码格式的正确SQL查询语句
你的原LIKE语句写法有误,SQL的LIKE不支持[000-9]这类正则风格的字符范围匹配,且通配符使用错误,所以无法返回预期结果。以下是两种可行的解决方法:
方法一:使用LIKE匹配(兼容多数数据库)
要筛选不符合(XXX) XXX-XXXX规范的错误条目,可执行:
SELECT * FROM table_name WHERE telephone_number NOT LIKE '(___) ___-____';
_是SQL中LIKE的单个字符通配符,每个_对应一位数字,能精准匹配格式结构,揪出像(123)456-7890(缺空格)、1234567890(无括号/空格/横线)这类错误记录。
若要找符合格式的条目,去掉NOT即可:
SELECT * FROM table_name WHERE telephone_number LIKE '(___) ___-____';
方法二:使用正则表达式匹配(支持正则的数据库,如MySQL、PostgreSQL)
如果你的数据库支持正则,可以更严格地限定只能是数字:
MySQL/MariaDB 版本:
-- 筛选不符合格式的条目 SELECT * FROM table_name WHERE telephone_number NOT REGEXP '^\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}$';
PostgreSQL 版本:
-- 筛选不符合格式的条目 SELECT * FROM table_name WHERE telephone_number !~ '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$';
正则表达式^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$的规则:
^和$分别限定字符串的开头和结尾,确保整个号码都符合格式\(和\)匹配左右括号(需转义)[0-9]{3}匹配3位数字,[0-9]{4}匹配4位数字- 中间的空格和横线严格匹配格式要求
内容的提问来源于stack exchange,提问作者Christie Noh
相关产品推荐
相关产品推荐

