正确生成上年月的输出
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
这个 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