我正在运行每周报告,如下面的脚本所示。但是,我现在想要运行月度报告,因此需要一些帮助。 每周:
SELECT * FROM TABLE WHERE
(ARRIVAL_DATE>GETDATE()-7)//7 days before
AND
(ARRIVAL_DATE<GETDATE()) //NOW
对于月度报告,如果我每隔一次运行,下面的脚本是否正确?
SELECT Column1,...
FROM TableName
WHERE
MONTH(DateColumn) = MONTH(dateadd(dd, -1, GetDate()))
AND
YEAR(DateColumn) = YEAR(dateadd(dd, -1, GetDate()))
感谢。
答案 0 :(得分:3)
你的逻辑看起来没问题,虽然我会使用day
代替dd
,因为我觉得它更清楚。
但是,您的查询将阻止在datecolumn
上使用索引。以下是一个更好的&#34;逻辑的形式,因为它允许使用索引:
where datecolumn >= dateadd(month, -1,
dateadd(day, 1 - day(getdate()), cast(getdate() as date))
) and
datecolumn < dateadd(day, 1 - day(getdate()), cast(getdate() as date))
这看起来更复杂,但所有函数都在getdate()
上,因此引擎可以使用索引。另请注意显式转换为date
。 getdate()
会返回一个时间组件,如果datecolumn
只有日期,则该组件可能会抛弃逻辑。
答案 1 :(得分:0)
其中日期列在dateadd(mm, -1,getdate()) and getdate()