2014-10-28 99 views
-1

我必須根據顏色條件獲取date_closed。SQL如何使用CASE WHEN查詢

- >如果顏色代碼爲綠色,關閉日期應該從時間戳

出現 - >如果顏色代碼是綠色以外的日期接近應爲空。

要做到這一點,我寫了下面的查詢:

(CASE 
WHEN A.C_STATUS = 'RD' THEN 'NULL' 
ELSE (CASE WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP) END) 
END) AS DATE_CLOSED 

這是給我的錯誤,指出NULL不能在該日期。我的代碼有什麼問題?

+0

它不工作..我用這兩個你建議的查詢。無論條件如何,所有關閉日期的值都顯示爲空。但是,如果它是工作,如果我這樣給它..(CASE WHEN A.C_STATUS ='GR「那麼1結束)作爲日期關閉。因此,我得到的值爲1的狀態爲綠色的行..但是當我用timestamp替換1時,所有的行都會出現空值 – 2014-10-29 05:33:10

回答

5

圍繞單詞'NULL'放置引號意味着您正在嘗試插入一個字符串,該字符串恰好包含您認爲應該表示爲NULL的單詞。你真正需要做的是說,它不包括引號,這SQL服務器將識別爲NULL,而不是「一些字符串在它的字母」

(CASE 
WHEN A.C_STATUS = 'RD' THEN NULL 
ELSE (CASE WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP) END) 
END) AS DATE_CLOSED 

作爲一個有趣的事實,如果你省略ELSE語句任何不適合你的CASE的將自動返回NULL。閱讀你的要求,它看起來像你是過度複雜的代碼:我相信以下將返回相同的結果。

CASE WHEN A.C_STATUS = 'GR' THEN F.T_TIMESTAMP END AS DATE_CLOSED 
+0

+1。你可以通過使事情明確地使'case'函數更直接地匹配spec:'當a.C_STATUS ='GR'時選擇case f.T_TIMESTAMP else null end as DATE_CLOSED ...' – 2014-10-28 18:51:58

+0

它不工作..我用這兩個查詢,你已經建議。所有關閉日期的值顯示爲null,無論條件如何。我給它這樣..(CASE WHEN A.C_STATUS ='GR「然後1結束)當日期關閉。所以對於這個我gettig的值爲1的狀態爲綠色的行..但是當我用時間戳替換1所有的行都是空的 – 2014-10-29 05:29:21

+0

好吧,所以這裏明顯的問題是什麼值在時間戳字段?您的CASE語句中有別名,這使得T_TIMESTAMP和C_STATUS列看起來在不同的表上:它們之間的JOIN條件是什麼,並且您確定實際存在您正在查看的行的TIMESTAMP值?用您的SELECT語句的完整SQL編輯您的原始問題,並且如果可能的話還包含一些示例數據。 – AHiggins 2014-10-29 11:58:59

0

你也可以寫你的case語句作爲

(
    CASE 
    WHEN A.C_STATUS = 'RD' THEN NULL 
    WHEN A.C_STATUS = 'GR' THEN (F.T_TIMESTAMP) 
ELSE 
END 
)AS DATE_CLOSED 

注:這是SQL statement.Not確保有關甲骨文公司的,但它應該是相同的。

+0

它不工作..我使用了你建議的兩個查詢。無論條件如何,所有關閉日期的值都顯示爲空。但是,如果它是工作,如果我這樣給它..(CASE WHEN A.C_STATUS ='GR「那麼1結束)作爲日期關閉。因此,我得到的值爲1的狀態爲綠色的行..但是當我用時間戳替換1時,所有的行都是空的 – 2014-10-29 05:33:27

+0

你可以分享你有的時間表樣本嗎? – Rohit 2018-02-26 18:26:27