爲什麼內置布爾函數在NULL
輸入上表現不同? 例如 - 此查詢:t-sql:內置布爾函數之間的不兼容
select 'ISDATE(null)' as function_call,
ISDATE(null) as result union all
select 'ISNUMERIC(null)' as function_call,
ISNUMERIC(null) as result union all
select 'IS_MEMBER(null)' as function_call,
IS_MEMBER(null) as result union all
select 'IS_SRVROLEMEMBER(null, null)' as function_call,
IS_SRVROLEMEMBER(null, null) as result
給我們:
function_call result
---------------------------- -----------
ISDATE(null) 0
ISNUMERIC(null) 0
IS_MEMBER(null) NULL
IS_SRVROLEMEMBER(null, null) NULL
這樣看來,ISDATE
,ISNUMERIC
根據布爾邏輯的行爲,但IS_MEMBER
,IS_SRVROLEMEMBER
- 根據Three valued logic行爲。 不應該所有布爾函數在NULL輸入上表現相同嗎? ANSI SQL標準對此有何評論?
謝謝
這個回答對於評論來說似乎太大了,所以在這裏。 –
@ 0x69我覺得很有趣,你接受了這個答案,而不是我的?不建議我對答案有一個問題,只是在一天後,而是總結性地同意我的評估:a)您引用的安全功能與其他兩個不在同一「類別」中,b)爲例如ISNUMERIC和ISDATE返回NULL幾乎沒有實際用途。然而,它並沒有專門針對你的有關ANSI標準的問題作爲我的嘗試。 – Sepster