在SQL中使用整数字段作为滚动周期的可变日期值

时间:2017-06-20 00:14:55

标签: sql sql-server

使用SQL Server 2012 我有一个整数格式的DateID字段,表示为YYYYMM 我需要将该字段设置为变量,每次使用脚本时,它都会找到最新的日期/最大DateID值并返回前12个月的所有记录。由于我看到的格式是DateID-100(因为201704 - 100返回201604,即2016年4月)

我的总脚本如下:

SELECT 
sum (isnull(Total_Items,0))
FROM [TABLE]
where Field1 = 'A'
and Field2 = 'B'
and Field3 = 'C'
and Field4 = 'D'
and dateid > 201604

> 201604位需要变量!

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

SELECT CAST(CONVERT( VARCHAR(6), DATEADD(YEAR,-1,GETDATE()), 112) AS INT);

,其中

112 specifies yyyymmdd(ISO)编码

答案 1 :(得分:0)

我倾向于这样做:

select sum(Total_Items)
from [TABLE]
where Field1 = 'A' and
      Field2 = 'B' and
      Field3 = 'C' and
      Field4 = 'D' and
      dateid > year(getdate()) * 100 + month(getdate());

逻辑似乎更容易理解。

此外,您不必担心NULL的{​​{1}}值。无论如何,聚合函数通常都会忽略它们。如果您想确保SUM()永不返回SUM(),那么您需要NULL