查询中的sql日期参数

Wil*_*est 2 sql

我有一个查询,我想添加参数来计算移动年度(过去12个月的数字).我试图从今天开始减去12个月,所以如果今天是2012年8月1日那么我的@StartDate应该是'2011-09-01'而我的@EndDate应该是'2012-08-31'.那么如何更改设置我的参数以适应这个?

declare @StartDate DATE
declare @EndDate   DATE
SET @StartDate = DATEADD(MONTH, -12, '2012-08-01')
SET @EndDate = DATEADD(MONTH, +1, '2012-08-01')
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 5

DECLARE
  @InputDate DATE,
  @StartDate DATE,
  @EndDate   DATE

SET
  @InputDate = '2012-08-01'

SET
  @StartDate = DATEADD(MONTH, DATEDIFF(MONTH, 0, @InputDate) - 11, 0)

SET
  @EndDate   = DATEADD(DAY, -1, DATEADD(MONTH, 12, @StartDate))
Run Code Online (Sandbox Code Playgroud)

编辑:

不过,我建议更换使用'2011-09-01',以'2012-08-31'在一年的表示.相反,'2011-09-01''2012-09-01'下列方式使用......

WHERE
      table.dateField >= '2011-09-01'
  AND table.dateField <  '2012-09-01'
Run Code Online (Sandbox Code Playgroud)

这适用于所有Date和DateTime数据类型.即使价值在dateField8月31日下午2:30,这仍然有效.这是一个一刀切的做法,并使得很多更难以做出日期和时间界限的错误.