2016-07-29 98 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

您错过了您的病例陈述的专栏名称。