SQL查询返回电话号码

时间:2018-01-25 03:16:38

标签: sql sql-server

我在SQL Server帽子中有一个表:

FirstName, LastName, MiddleName, CellNumber, HomeNumber
John Smith M 111-111-1111, 222-222-2222

此人可以拥有CellNumber和HomeNumber,也可以拥有CellNumber但不能拥有HomeNumber,或者可以拥有HomeNumber而不能拥有CellNumber。

如果CellNumber为NULL或空白,我如何编写一个总是返回CellNumber(如果存在)和HomeNumber的查询。

用于生成以下结果的SQL查询:

FirstName, LastName, MiddleName, NumberToUse, PhoneType
John Smith M 111-111-1111 CellNumber

感谢您的帮助。

5 个答案:

答案 0 :(得分:0)

您使用case

select . . .,
       (case when cellNumber is not null or cellNumber <> '' then cellNumber else homeNumber en) as NumberToUse,
       (case when cellNumber is not null  or cellNumber <> '' then 'Cell' else 'Home' end) as PhoneType
from t;

如果空白可以包含空格,您可以使用replace()ltrim()删除空格(用于比较)。

严格来说,与is not null的比较并非必要。但它使查询的意图更加明显。

答案 1 :(得分:0)

只有一种情况,首先要检查CellNumber是否可用,否则回退到HomeNumber。

SELECT 
    FirstName, 
    LastName, 
    MiddleName,
    CASE WHEN  
        CellNumber IS NOT NULL THEN CellNumber
    ELSE 
        HomeNumber 
    END AS NumberToUse,
    PhoneType
FROM
    TableName

答案 2 :(得分:0)

coalesce在这里是你的朋友..它返回列表中的第一个非空值..所以你不必做一整堆case语句

 select coalesce(cellnumber,HomeNumber) from yourtable

答案 3 :(得分:0)

另一个选项Coalesce()NullIf()

一致

示例

Select FirstName 
      ,LastName
      ,MiddleName 
      ,DefaultPhone = coalesce(NullIf(CellNumber,'')+' Cell',NullIf(HomeNumber,'')+' Home')
 from YourTable

答案 4 :(得分:0)

select FirstName, LastName, MiddleName,
case when isnull(CellNumber, '') = '' then HomeNumber else CellNumber end as NumberToUse,
case when isnull(CellNumber, '') = '' then 'HomeNumber' else 'CellNumber' end as PhoneType
from ...