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

SQL Server 2014:如何筛选至少一个手机号字段含数字的记录?

正确筛选至少一个手机号含数字的记录

我来帮你搞定这个手机号筛选的问题~首先得理清咱们的核心需求:要保留那些至少有一个手机号字段(DayTimePhone/EveningPhone/MobilePhone)既不是空白(空字符串)、不是'-',还确实包含至少一个数字的记录。之前的代码没处理空字符串,也没真正校验“包含数字”这个关键条件,所以才会把三个字段全空白的行也拉出来。

下面针对几种主流数据库,给出具体的SQL写法:

MySQL/MariaDB 版本

用REGEXP来匹配数字,同时加上TRIM()处理纯空格的情况(如果你的数据里没有纯空格的字段,可以去掉TRIM()):

SELECT *
FROM your_table_name
WHERE 
  (TRIM(DayTimePhone) <> '' AND DayTimePhone <> '-' AND DayTimePhone REGEXP '[0-9]')
  OR
  (TRIM(EveningPhone) <> '' AND EveningPhone <> '-' AND EveningPhone REGEXP '[0-9]')
  OR
  (TRIM(MobilePhone) <> '' AND MobilePhone <> '-' AND MobilePhone REGEXP '[0-9]');

SQL Server 版本

SQL Server里用PATINDEX来检测是否包含数字:

SELECT *
FROM your_table_name
WHERE 
  (TRIM(DayTimePhone) <> '' AND DayTimePhone <> '-' AND PATINDEX('%[0-9]%', DayTimePhone) > 0)
  OR
  (TRIM(EveningPhone) <> '' AND EveningPhone <> '-' AND PATINDEX('%[0-9]%', EveningPhone) > 0)
  OR
  (TRIM(MobilePhone) <> '' AND MobilePhone <> '-' AND PATINDEX('%[0-9]%', MobilePhone) > 0);

PostgreSQL 版本

PostgreSQL用~操作符做正则匹配:

SELECT *
FROM your_table_name
WHERE 
  (TRIM(DayTimePhone) <> '' AND DayTimePhone <> '-' AND DayTimePhone ~ '[0-9]')
  OR
  (TRIM(EveningPhone) <> '' AND EveningPhone <> '-' AND EveningPhone ~ '[0-9]')
  OR
  (TRIM(MobilePhone) <> '' AND MobilePhone <> '-' AND MobilePhone ~ '[0-9]');

额外小提示

如果你的数据里还有其他无效占位符(比如'N/A'、'无'这类),可以在每个字段的条件里继续添加AND 字段 <> 'N/A'这类判断,把这些无效值也排除掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:23:36