簡體   English   中英

使用IS NULL和IS NOT NULL的CASE語句

[英]CASE Statement using IS NULL and IS NOT NULL

我正在建立一個新的SQL表,但在CASE語句中遇到了一些麻煩,似乎無法解決。

我在WHEN參數中需要滿足兩個不同的子句,並用AND子句分隔。 這兩個子句都在尋找NULL值(為null或不為null)以及此變量的變體。

      ,CASE WHEN [FULL_TELEPHONE_NUMBER] IS NOT NULL AND [EMAIL] IS NOT NULL THEN 'Phone Number AND Email Address Available'
        WHEN [FULL_TELEPHONE_NUMBER] IS NOT NULL AND [EMAIL] IS NULL THEN 'Phone Number ONLY Available'
        WHEN [FULL_TELEPHONE_NUMBER] IS NULL AND [EMAIL] IS NOT NULL THEN 'Email Address ONLY Available'
        WHEN [FULL_TELEPHONE_NUMBER] IS NULL AND [EMAIL] IS NULL THEN 'No Contact Details Available'
    ELSE 'ERROR' END AS '[CONTACT DETAILS AVAILABLE]'

不幸的是,關於被查詢的列包含什么,返回的數據僅針對每個結果打印第一個條件。

盡管列中保存的數據為空,但是否有可能它們不是真正的NULL? 還是NULL是這里的正確術語,我可以使用更好的方法嗎?

非常感謝。

數據實際上很可能是空字符串而不是null。 您可以使用以下內容進行說明:

WHEN IsNull([FULL_TELEPHONE_NUMBER], '') <> '' AND isnull([EMAIL], '') <> '' THEN 'Phone Number AND Email Address Available'

這是解決此問題的另一種方法。 您可以使用>''代替所有IS NULL等。

CASE WHEN [FULL_TELEPHONE_NUMBER] + [EMAIL] > '' THEN 'Phone Number AND Email Address Available'
        WHEN [FULL_TELEPHONE_NUMBER] > '' AND [EMAIL] IS NULL THEN 'Phone Number ONLY Available'
        WHEN [FULL_TELEPHONE_NUMBER] IS NULL AND [EMAIL] > '' THEN 'Email Address ONLY Available'
        WHEN [FULL_TELEPHONE_NUMBER] IS NULL AND [EMAIL] IS NULL THEN 'No Contact Details Available'
    ELSE 'ERROR' END AS '[CONTACT DETAILS AVAILABLE]'

當第一個參數的值等於第二個參數時nullif(col,'')可以使用nullif(col,'')返回null

,CASE 
  WHEN nullif([FULL_TELEPHONE_NUMBER],'') IS NOT NULL AND nullif([EMAIL],'') IS NOT NULL 
    THEN 'Phone Number AND Email Address Available'
  WHEN nullif([FULL_TELEPHONE_NUMBER],'') IS NOT NULL AND nullif([EMAIL],'') IS NULL 
    THEN 'Phone Number ONLY Available'
  WHEN nullif([FULL_TELEPHONE_NUMBER],'') IS NULL AND nullif([EMAIL],'') IS NOT NULL 
    THEN 'Email Address ONLY Available'
  WHEN nullif([FULL_TELEPHONE_NUMBER],'') IS NULL AND nullif([EMAIL],'') IS NULL 
    THEN 'No Contact Details Available'
    ELSE 'ERROR' 
    END 
    AS '[CONTACT DETAILS AVAILABLE]'

也可以簡化為:

, [contact details available] = case 
    when nullif([full_telephone_number],'') is not null 
     and nullif([email],'') is not null 
      then 'phone number and email address available'
    when nullif([full_telephone_number],'') is not null 
      then 'phone number only available'
    when nullif([email],'') is not null 
      then 'email address only available'
      else 'no contact details available'
      end 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM