當我遇到錯誤時,如何以正確的格式排列 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
感謝您的幫助。
uj5u.com熱心網友回復:
如果離開的欄位日期不為空顯示,我正在嘗試創建一個條件,否則顯示為活動
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 NULLor將某些內容與 null 進行比較IS NOT 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=NULLis NULL,然后變成NOT(NULL)which is NULL。如果NULL=NULL立即成為FALSE那么NOT(NULL=NULL)將是NOT(FALSE)哪個TRUE。null 在您執行的整個操作集中傳播,在最后彈出然后被解釋為 false 的事實可能是有利的,但始終是您應該注意的事情......
當然,如果接收它旨在用于處理NULL,像的東西COALESCE(NOT(NULL=NULL), 'it was null'),然后它會收到一個空(在這種情況下將輸出'it was null'),但通常在使用它在布爾背景關系像您選擇CASE WHEN NOT(mycolumn=NULL) THEN...或WHERE NOT(mycolumn=NULL)成為由情況下,當接收到NULL /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,然后將其觸及的所有內容歸零
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327557.html
上一篇:如何用Java撰寫SQL查詢以從Snowflake獲取資料
下一篇:選擇時間序列的不同連續值
