【问题标题】:SQL Query To Return Phone NumberSQL查询返回电话号码
【发布时间】:2018-01-25 03:16:37
【问题描述】:

我在 SQL Server 中有一个表:

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

此人可以同时拥有 CellNumber 和 HomeNumber,或者可以拥有 CellNumber 但没有 HomeNumber,或者可以拥有 HomeNumber 而没有 CellNumber。

我如何编写一个查询,如果存在则始终返回 CellNumber,仅当 CellNumber 为 NULL 或空白时返回 HomeNumber。

SQL 查询产生以下结果:

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

感谢您的帮助。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

另一个选项是 Coalesce()NullIf() 一致

示例

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

【讨论】:

    【解决方案2】:

    coalesce 是你的朋友。它返回列表中的第一个非 null 值。所以你不必做一大堆 case 语句

     select coalesce(cellnumber,HomeNumber) from yourtable
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你使用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 的比较是不必要的。但它使查询的意图更加明显。

        【讨论】:

        • 这将返回空白单元格编号。此外,如果 cellNumber 不为 null 或 cellNumber = '' 将返回 'Cell'?来吧戈登。哦,伙计,我纠正了戈登林诺夫。 :)
        • 这样更好。 :)
        • @GordonBell 。 . .当我第一次阅读查询时,我错过了关于空白的部分。我第一次的编辑做得不是很好。
        【解决方案5】:
        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 ...
        

        【讨论】:

        • 请考虑为您的答案添加一些解释。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        相关资源
        最近更新 更多