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

如何将长度不足12位的格式化手机号查询结果替换为NULL?

处理手机号格式化后长度不足的问题

你当前的SELECT语句能去除手机号中的无效字符,并将其格式化为123-456-7890的样式,但部分处理结果长度不足12位(比如123-983-12),要把这类结果替换为NULL,只需在原语句外层嵌套一个CASE判断即可:

修改后的完整语句

CASE
    WHEN LEN(
        COALESCE(
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(OFFICE_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12),
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(MOBILE_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12),
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(FIELD_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12)
        ) = 12
    THEN
        COALESCE(
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(OFFICE_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12),
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(MOBILE_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12),
            SUBSTRING(STUFF(STUFF(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(FIELD_PHONE,'-',' '),',',' '),' ',''), '(', ''), ')', ''),4,0,'-'),8,0,'-'), 1, 12)
        )
    ELSE
        NULL
END AS ValidPhoneNumber,

逻辑说明

  • 通过LEN()函数检查格式化后的手机号长度是否等于标准的12位(对应123-456-7890的格式)
  • 长度符合要求时返回原格式化结果,否则返回NULL

可选优化(简化字符替换)

如果你的数据库支持TRANSLATE函数(比如SQL Server 2017及以上版本),可以把多层REPLACE简化为一次处理,让代码更简洁:

-- 简化后的字符替换逻辑示例
REPLACE(TRANSLATE(OFFICE_PHONE, '-(),', '    '), ' ', '')

这个语句会一次性把-、(、)、,替换为空格,再统一去掉所有空格,效果和原多层REPLACE一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:24