2016-08-03 21 views
0

如何在不使用IsNULL的情況下編寫以下語句?如何在不使用SQL Server中的IsNull的情況下比較空值

Case 
    When (IsNull(Email_Ind, '') != 'N' 
     then 'e' 
     else 'n' 
end 

這是否得到正確的結果?

Case 
    When Email_Ind != 'N' and Email_Ind is not null 
     then 'e' 
     else 'n' 
end 
+2

你爲什麼不喜歡ISNULL?這可能會傷害SQL Server的感受:) – scsimon

+0

哈哈..我總是使用幾列加密,它不喜歡IsNull – HadoopAddict

+0

其實我認爲它很好,只是很難閱讀。我的回答與你的沒有什麼不同,只是不同而已。 – scsimon

回答

3

您的案例陳述看起來不錯。這只是一個關於如何編寫它的偏好問題。對我來說,這是更容易理解的,但我不確定所有情況。

Case When Email_Ind != 'N' or Email_Ind is null then 'e' else 'n' end 
-1

使用EXCEPT and INTERSECT對於這樣的事情:

select case when (select Email_Ind intersect select 'Y') = 1 then 'E' else 'N' end 

至於建議由@ypercubeᵀᴹ,這也將工作(並可能是陳述查詢更多的語義的方式):

select case when exists (select Email_Ind intersect select 'Y') then 'E' else 'N' end 
+0

@ypercubeᵀᴹ對不起,我忘了'= 1'。 – Kittoes0124

+2

聰明,但任何遇到此代碼的人都必須仔細思考它,然後才意識到它的目的只是!='N'或OR爲空。這就像在代碼中留下一個小小的rubiks立方體,開發人員必須解決這個問題,才能理解目的。 – AaronLS

+0

@AaronLS在這個世界上,如何優雅地比較'nulls'聰明或魔方?是一種慣用的T-SQL方法?我認爲一個不懂T-SQL的人可能仍然會消化這個版本,因爲它比它們可以分解一個IsNull(,'')!='''比較更容易,因爲它非常接近IN英文實際上做了什麼。 – Kittoes0124

相關問題