[英]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.