2017-04-20 67 views
1

我一直有一個錯誤,我不明白爲什麼,我希望你能幫助我。我想提出以下表達式:CASE/IF with cast

CAST((pwdLastSet0/864000000000.0 - 109207) AS DATETIME) AS 'PasswordLastSet',dateadd(d, 80, CAST((pwdLastSet0/864000000000.0 - 109207) as DATETIME)) AS 'expirationdate' 

因爲如果我的列值pwdlastset0爲null,則無法進行計算。

所以,我想兩個形狀:

case 
    when pwdlastset0 !=0 
    then 
CAST((pwdLastSet0/864000000000.0 - 109207) AS DATETIME) AS [Password Last Set],dateadd(d, 80, CAST((pwdLastSet0/864000000000.0 - 109207) as DATETIME)) AS 'futurdate' 
    else 
pwslastset0 = 'The password has never been set' 

If pwdlastset0 !=0 
then 
CAST((pwdLastSet0/864000000000.0 - 109207) AS DATETIME) AS [Password Last Set],dateadd(d, 80, CAST((pwdLastSet0/864000000000.0 - 109207) as DATETIME)) AS 'futurdate' 
else 
pwdlastset0 = 'The password has never been set' 

我想沒有 「AS」,也改變我的病情,我的意思是,如果= 0,則顯示「未還沒有設定'其他的教育。無論如何,我無法讓它工作,所以如果你們有任何想法我還沒有嘗試,非常感謝你!

+0

我只是白馬DATEADD函數和它的工作... –

回答

3

pwdlastset0 !=0不檢查NULL。使用IS NULL表達:

case 
    when pwdlastset0 IS NOT NULL 
    then 
CAST((pwdLastSet0/864000000000.0 - 109207) AS DATETIME) AS [Password Last Set],dateadd(d, 80, CAST((pwdLastSet0/864000000000.0 - 109207) as DATETIME)) AS 'futurdate' 
    else 
pwslastset0 = 'The password has never been set' 
+0

HI,謝謝你的答案,我應該考慮一下!無論如何,我一直有一個錯誤,由於CAST ... –

+0

@MartinVincent也許,你使用錯誤的數據類型'pwdlastset0' – Backs

+0

我有正確的結果,如果我添加「where pwdlastset!= 0」,但我也想將pwdlast = 0顯示爲'pwd從未設置' –

0

更改比較,以檢查是否pwdlastset0大於0如果不大於0,則返回密碼從未設置。

case 
    when pwdlastset0 > 0 
    then 
CAST((pwdLastSet0/864000000000.0 - 109207) AS DATETIME) AS [Password Last Set],dateadd(d, 80, CAST((pwdLastSet0/864000000000.0 - 109207) as DATETIME)) AS 'futurdate' 
    else 
pwslastset0 = 'The password has never been set'