正确生成上一年和一月的产量

时间:2017-02-02 03:29:47

标签: sql sql-server tsql date getdate

创建此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 个答案:

答案 0 :(得分:2)

我同意蒂姆的回答,但他写的代码有点简洁。 以下代码应仅使用一个DateAdd和一个Convert来提供相同的结果:

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

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

201612

答案 1 :(得分:1)

我认为处理这个问题最简单的方法就是计算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