如何将长度不足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
相关产品推荐
相关产品推荐

