正确生成上年月的输出

Produce output of previous year and month correctly

这个 sql 是为了检查日期而创建的,但是当我 运行 2 个月前的测试时,输出是 201700 而不是 201612。

DECLARE @PeriodID AS CHAR(6)
SELECT @PeriodID = CONVERT(char(4), YEAR(GETDATE())) +
CASE
      WHEN MONTH(GETDATE())<10 THEN '0' +CONVERT(char(2),MONTH(GETDATE())-2)
ELSE  CONVERT(char(2),MONTH(GETDATE())-1)
END
print @periodid      

我认为处理这个问题的最简单方法就是计算 2 个月前的日期,然后仅使用年份和月份格式化输出,正如您的问题所暗示的那样:

SELECT CONVERT(CHAR(4), YEAR(DATEADD(month, -2, GETDATE()))) +
       RIGHT('00' + CAST(MONTH(DATEADD(month, -2, GETDATE())) AS CHAR(2)), 2) AS periodId
FROM yourTable

我同意Tim的回答,但是他写的代码有点繁琐。 下面的代码应该提供相同的结果,只使用一个 DateAdd and one Convert:

DECLARE @PeriodID AS CHAR(6)
SELECT @PeriodID = CONVERT(CHAR(6), DATEADD(MONTH, -2, GETDATE()), 112) 
PRINT  @PeriodID

结果(今天 - 2017-02-02):

201612