SQl CASE声明

时间:2016-03-22 15:03:20

标签: tsql

我希望对某个条件(以及DateTime之前发生的事件March 1st 2016)对列值('Preseason')进行排序,

事件在march 31st 2016之后发生'PostSeason'其他'Season'。 --query ---     选择EventDate = Case     当EventDate<' 01-03-2016'然后' PreSeason'     当EventDate>' 31-03-2016'然后' PostSeason'
    其他季节'     结束,     EventName来自tblEvent

- 错误讯息  '消息242,将varchar数据类型转换为日期时间数据类型会导致超出范围的值。'

2 个答案:

答案 0 :(得分:0)

像...这样的东西。

ORDER BY 
  CASE 
    WHEN ISDATE(DateTime) = 1 THEN 
    CASE DateTime
       WHEN <= '2016-03-01' THEN 1   -- Preseason
       WHEN >= '2016-03-31' THEN 3   -- PostSeason
       ELSE 2 END                    -- Season
   ELSE 4 END,                       -- Not a date, figure out how to handle
  DateTime

答案 1 :(得分:0)

- 好的,是日期格式问题。我在我的查询中使用了欧洲日期格式(dd-mm-yyyy),但我使用的系统采用美国日期格式(mm-dd-yyyy),因此我的查询失败。 **

  • 解决方案

**     选择Cast(案例     当EventDate&lt; =&#39; 01/01/2016&#39;然后&#39; PreSeason&#39;     当EventDate&gt; =&#39; 12/31/2016&#39;然后&#39; PostSeason&#39;
    其他季节&#39;     结束为Varchar(25))作为季节,EventName来自tblEvent

感谢支持!!!!