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

SQL Setting Variable for Current Year Month by Combining two VarChar fields using case statement

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

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

如果月份只有一位数字(10 月之前的任何月份),我需要月份变量前面有一个 0。当前代码 returns '20182' 并希望它成为 return '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;

你的代码太复杂了。使用 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

如果要查找当前月份,可以使用 Convert 函数

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

声明@current_month varchar(6)

设置@current_month = CAST(year(getdate())*100 + month(getdate()) as varchar(6))