查询的日期特定标准

时间:2012-10-30 16:50:10

标签: sql sql-server

我有一个查询,从上个月20日到本月19日收集数据,似乎有效。

(DateTime >= 19+dateadd(mm,datediff(mm,0,getdate())-1,0)   
AND  DateTime <  18+dateadd(mm,datediff(mm,0,getdate()),0)) 

我现在需要以某种方式修改它以满足以下...

无论何时运行,始终显示当前报告。

目前发生的事情是.....如果在上个月20日到本月19日之间的任何时间运行,它会很有效.....但是一旦它在本月20日到达第31个月这个月....它一直显示最后一个时期....技术上我要求它做。

我需要的是.....当它成为本月20日......它会开始一个新的报告。

正如我所说.....问题期间是在20日到月底之间。一旦新月开始......一切都很好。

在运行报告时,必须考虑到这一点。

感谢。

戴夫

2 个答案:

答案 0 :(得分:0)

戴夫,我认为这对你有用。

    (
         (Day(GetDate()) > 19 and create_date between dateadd(mm, datediff(mm, 0, getdate()), 0) + 19 and dateadd(mm, datediff(mm, 0, getdate()), 0) + 18)
         or (Day(GetDate()) < 20 and create_date between dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 19 and dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 18)
    )

它实质上会检查当前日期是否大于19并应用您当前的逻辑而不减去一个月。我当前的日期小于你当前逻辑应用的第20天。

答案 1 :(得分:0)

(
 DateTime >= CASE WHEN day(GETDATE()) >= 20 THEN 19 + dateadd(mm, datediff(mm, 0, getdate()), 0) ELSE 19 + dateadd(mm, datediff(mm, 0, getdate()) - 1, 0) END AND
 DateTime < CASE WHEN day(GETDATE()) >= 20 THEN 18 + dateadd(mm, datediff(mm, 0, getdate())+ 1, 0) ELSE 18 + dateadd(mm, datediff(mm, 0, getdate()), 0) END
)
相关问题