SQL Server:优先取多表手机号,双空时返回空白而非NULL的问题
问题分析
你的CASE语句逻辑顺序出错了——当dbo.vwPersonDistinctPhone.phone为NULL时,不管PERSONAL_PHONE_NUMBER是不是NULL,都会直接返回PERSONAL_PHONE_NUMBER,导致两者都为NULL时,根本轮不到返回空格的条件执行,所以结果还是会出现NULL。
两种解决方法
方法一:调整CASE条件顺序
按优先级依次判断非NULL的情况,最后兜底返回空格:
SELECT CASE -- 优先取视图里的非NULL手机号 WHEN dbo.vwPersonDistinctPhone.phone IS NOT NULL THEN dbo.vwPersonDistinctPhone.phone -- 视图值为NULL时,取PERSONAL_PHONE_NUMBER的非NULL值 WHEN PERSONAL_PHONE_NUMBER IS NOT NULL THEN PERSONAL_PHONE_NUMBER -- 两者都为NULL时返回空格 ELSE ' ' END AS phone
方法二:用COALESCE函数更简洁
SQL Server的COALESCE函数会返回参数列表里第一个非NULL的值,所有参数都为NULL时返回最后一个参数,完美匹配你的需求,代码更简洁:
SELECT COALESCE(dbo.vwPersonDistinctPhone.phone, PERSONAL_PHONE_NUMBER, ' ') AS phone
内容的提问来源于stack exchange,提问作者KLR
相关产品推荐
相关产品推荐

