我正在使用SQL Server 2014,并且需要编写一个SQL查询,该查询将更新DateDimension表中的列(称为ToY)。
这是我的DateDimension表的摘录:
Day Month Year Date ToY
1 11 2014 2014-11-01 NULL
2 11 2014 2014-11-02 NULL
我需要根据以下逻辑更新该ToY列:
对于2014年11月至2015年10月之间的所有日期,ToY将为“ ToY 14-15”,而对于2015年11月至2015年10月之间的所有日期,ToY将为“ ToY 15-16”。
例如:如果月份= 11,年份= 2014,则ToY ='ToY 14-15'
我已经尝试过这段SQL代码,但是没有用:
UPDATE DateDimension
SET ToY = CASE Month+Year
WHEN 112014 THEN 'ToY 14-15'
ELSE ToY
END
GO
我进行了搜索,发现我可以将第三行写为:WHEN Month = 11 AND Year = 2014 THEN'Toy 14-15'
但是,我对CASE语句后的内容感到困惑:
Set ToY = CASE ??
这使用了一些功能,但希望可以使我的思路很清楚:
UPDATE DateDimension
SET ToY = 'ToY ' +
CONVERT(char(2),DATEADD(month,-10,[Date]),12) + '-' +
CONVERT(char(2),DATEADD(month,2,[Date]),12)
DATEADD(month,-10,...
-对于11月之前的任何日期,请将此日期移至去年。DATEADD(month,2,...
-对于十月之后的任何日期,请将此日期移至明年。总而言之,它们要么选择去年和今年(11月之前),要么选择今年和明年。
CONVERT(char(2),<date>,12)
-将日期转换为样式中 的字符串yymmdd
-但由于我要求输入char(2)
,因此仅保留了前2个字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句