[英]SQL case expression with where condition
當我遇到錯誤時,如何以正確的格式排列 sql 的 case 表達式。 如果離開的字段日期不為空顯示,我正在嘗試創建一個條件,否則顯示為活動
SELECT DISTINCT
PEO.PEOPLE_ID AS [PEOPLE_ID]
,PEO.EMPLOYEECLOCKNO AS [EMPLOYEENUMBER]
,ISNULL(CONVERT(VARCHAR(50),PEO.DATEOFJOIN,103),'') AS [DATEOFJOIN]
--,ISNULL(PEO.DISPLAYSTATUS,'') AS [DISPLAYSTATUS]
,CASE
When ISNULL(PEO.STATUS,'' ) = 'A'
Then 'ACTIVE'
ELSE 'LEFT' WHERE PEO.DATEOFLEAVING <> NULL
END as [STATUS]
INTO #BSP_EMPLOYEEDETAILS
感謝您的幫助。
如果離開的字段日期不為空顯示,我正在嘗試創建一個條件,否則顯示為活動
CASE WHEN PEO.DATEOFLEAVING IS NULL THEN 'ACTIVE' ELSE 'LEFT' END
(我更喜歡讓布爾檢查產生積極的感覺而不是消極的感覺,但如果你想要它消極......)
CASE WHEN PEO.DATEOFLEAVING IS NOT NULL THEN 'LEFT' ELSE 'ACTIVE' END
請注意 HoneyBadger 的評論; 您應該只使用IS NULL
或IS NOT NULL
將某些內容與 null 進行比較 - 帶有任何非 IS 運算符的 null 右操作數的結果為 null:
NULL IS NULL --true
NULL IS NOT NULL --false
NULL = NULL --null, which eventually will (probably) be processed as false
NULL <> NULL --null, which eventually will (probably) be processed as false
NULL != NULL --null, which eventually will (probably) be processed as false
NOT(NULL = NULL) --null, which eventually will (probably) be processed as false
我說“最終”是因為它很重要; 零點差。 如果你看最后一種情況, NULL=NULL
是NULL
,然后變成NOT(NULL)
,這也是NULL
。 如果NULL=NULL
立即變為FALSE
則NOT(NULL=NULL)
將是NOT(FALSE)
這將是TRUE
。 null 在您執行的整個操作集中傳播,在最后彈出然后被解釋為 false 的事實可能是有利的,但始終是您應該注意的事情......
當然,如果接收它的東西是為了處理 NULL,比如COALESCE(NOT(NULL=NULL), 'it was null')
那么它會收到一個 null(在這種情況下會輸出'it was null'
)但是通常,當您在布爾上下文中使用它時,例如CASE WHEN NOT(mycolumn=NULL) THEN...
或WHERE NOT(mycolumn=NULL)
它變成的 NULL 被 case when/where 接收並解釋為false
。
可能值得指出的是,SQLServer 在這些上下文中不支持布爾值,因此您不會使用這樣的合並,甚至NOT(NULL=NULL)
示例,但如果您想嘗試發出聲音你的知識,MySQL 更寬容,並允許查詢如下:
select case when (NOT(x = NULL)) IS NULL THEN 't' ELSE 'f' end
from (select null as x)y
select case when (NOT(x = NULL)) IS UNKNOWN THEN 't' ELSE 'f' end
from (select null as x)y
SQLServer 期望您更快地確定空值,並且不會讓您處理它可以看到已變為空/未知的事情
關於 UNKNOWN 的腳注; 它通常被視為(在規范中,甚至)與布爾值 NULL 同義 - 它在真值表意義上被稱為三態布爾邏輯中的第三個值,但如果 DBs 支持 UNKNOWN 作為一個關鍵詞。 就我個人而言,我喜歡少記一件事情; 您可以通過應用這些簡單規則來了解 NULL 的行為並獲得邏輯一致的結果:IS NULL、IS NOT NULL、任何其他內容都變為 NULL,然后將其觸及的所有內容歸零
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.