2016-07-29 100 views
0

下面是我的SQL查詢的一部分,只是部分因爲它很長。SQL:CASE問題,轉換日期

問題是,當我添加CASE到我的select語句時,它給了我一個錯誤。 NSO評論欄包含日期。但是不是所有行都有日期可用,查詢然後放置'1900-01-01'。我想用NO代替它,如果有其他值,那麼就把YES。你能幫

SELECT 'NSO Review' = ISNULL(tblTaskEventsHistory.TimeIn,''), 
     CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102)) 
     WHEN '1900' THEN 'NO' 
     ELSE 'YES' 
     END,  
     'Business Group' = ISNULL(MetadataBG.Value,''), 
     'CTN' = ISNULL(MetadataCT.Value,''), 

錯誤

消息1038,15級,狀態5,277線 對象或列名不存在或爲空。對於SELECT INTO語句,請確認每列都有一個名稱。對於其他語句,查找空的別名。別名定義爲「」或[]是不允許的。將別名更改爲有效的名稱。

+2

請爲您使用的RDBMS添加標籤,並且您收到的錯誤消息不在您的代碼中 – TheGameiswar

回答

0

您應,如前面提到的,使用DateTime函數。 要比較日期的某些部分,請參見DATEPART (https://msdn.microsoft.com/en-us/library/ms174420.aspx)。

然後,你可以試試這個:

SELECT 
CASE WHEN DATEPART(yy, tblTaskEventsHistory.TimeIn) = 1900 THEN 'NO' 
ELSE 'YES' 
END AS Status; 

希望它會幫你的。

1

您應遵循錯誤消息:「別名定義爲‘’或[]不允許」和「驗證的每一列都有一個名稱」:

SELECT NSO_Review = ISNULL(tblTaskEventsHistory.TimeIn,''), 
     TimeIn = CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102)) 
     WHEN '1900' THEN 'NO' 
     ELSE 'YES' 
     END, 
+0

我忘記了告訴它它的SELECT INTO。 – MaciejPL

+0

它是workig像下面,但我得到的所有YESes 選擇\t 'NSO評論'= ISNULL(tblTask​​EventsHistory.TimeIn, ''), \t \t CASE \t tblTask​​EventsHistory.TimeIn \t \t \t如果 '1900',那麼 'NO' \t \t否則'是' \t \t END作爲NSORequest, – MaciejPL

0

您錯過了您的病例陳述的專欄名稱。