2

所以我有以下查询

Select id, [First], [Last] , [Business] as contactbusiness, (Case When ([Business] != '' or [Business] is not null) 
        Then [Business] Else 'No Phone Number' END) from contacts

结果看起来像

id  First   Last    contactbusiness (No column name)
2   John    Smith       
3   Sarah   Jane    0411 111 222    0411 111 222
6   John    Smith   0411 111 111    0411 111 111
8                   NULL            No Phone Number
11  Ryan    B       08 9999 9999    08 9999 9999
14  David   F       NULL            No Phone Number

我希望记录 2 也显示没有电话号码

如果我将“[Business] is not null”更改为 [Business] != null 那么我会得到正确的结果

id  First   Last    contactbusiness (No column name)
2   John    Smith                   No Phone Number
3   Sarah   Jane    0411 111 222    0411 111 222
6   John    Smith   0411 111 111    0411 111 111
8                   NULL            No Phone Number
11  Ryan    B       08 9999 9999    08 9999 9999
14  David   F       NULL            No Phone Number

通常你需要使用 is not null 而不是 != null。这里发生了什么?

4

3 回答 3

3

您需要使用AND,而不是OR在您的条件中:

[Business] != '' and [Business] is not null

这很令人困惑,因为您使用的是底片。我只是翻转整个条件并使用正面(在这种情况下你会使用OR):

(Case When ([Business] == '' or [Business] is null) 
    Then 'No Phone Number' Else [Business] END)
于 2012-10-18T22:49:41.307 回答
2

你的逻辑是错误的。检查两个否定时,您需要使用AND :

Case When ([Business] != '' AND [Business] is not null
于 2012-10-18T22:50:50.360 回答
2

如前所述,您的逻辑不正确。你可以使用

SELECT id, [First], [Last] , [Business] AS contactbusiness, 
    COALESCE(NULLIF([Business], ''), 'No Phone Number')
FROM contacts

因为SQL那更简洁

为什么If i change the "[Business] is not null" to [Business] != null then i get the correct results起作用的原因是它[Business] != null总是错误的。

正如您所提到的,SQL 使用 is 运算符检查空值,并且空值的相等比较总是失败(用select 'hi' where (null = null)and进行实验select 'hi' where (null != null))。使用您的 OR 语句和短路意味着:

  1. 当电话号码在那里时,第一个条件[Business] != ''为真。所以 OR 语句为真并且使用了电话号码
  2. 当第一个条件失败时,第二个条件[Business] != null也为假。所以 OR 语句为假,显示“无电话号码”
于 2012-10-18T22:58:10.490 回答