通过使用case语句组合两个VarChar字段的SQL设置当前年月份的变量

时间:2018-02-13 15:46:17

标签: tsql variables case varchar declare

我正在尝试根据名为YEARMO的字段声明当前年份和月份的变量。

它是一个6个字符的varchar字段,前4个字符代表年份,接下来的2个字符代表月份(例如,2018年2月为201802)。

如果月份只有一位数(10月份之前的任何月份),我需要月份变量在它前面有一个0。当前代码返回' 20182'并希望它返回' 201802'。

declare @current_month varchar(6)

set @current_month = CAST( year(getdate()) as varchar(4)) 
+ case when  len(CAST( month(getdate()) as varchar(2))) < 1 then '0' + 
CAST( month(getdate()) as varchar(2)) 
else CAST( month(getdate()) as varchar(2))
end

select @current_month;

3 个答案:

答案 0 :(得分:3)

如果您正在寻找当月,可以使用Convert功能

select convert(char(6), getdate(), 112)

答案 1 :(得分:0)

您的代码过于复杂。请改用right

declare @current_month char(6)
set @current_month = CAST( year(getdate()) as varchar(4)) + right('00' + cast(month(getdate()) as varchar(2)), 2)
select @current_month;

结果:

201802

如果您确实想要使用case,则应将1更改为2

set @current_month = CAST( year(getdate()) as varchar(4)) + 
                     case when len(CAST(month(getdate()) as varchar(2))) < 2 then 
                     '0' + CAST( month(getdate()) as varchar(2)) else 
                     CAST( month(getdate()) as varchar(2)) end

答案 2 :(得分:0)

声明@current_month varchar(6)

设置@current_month = CAST(年(getdate())* 100 +月(getdate())为varchar(6))