SQL事件查询在任何月份的1月1日当事件发生在该月的任何一天时带来结果

时间:2017-04-27 16:42:24

标签: sql-server

我有一种情况,当evaluate_date是90天到期时,查询会带来数据...现在。 新要求是...... evaluate_date的实际日期可以在该月的任何一天生效,但报告必须在该特定月份的第一天带来记录。例如:如果evaluate_date到期为2017-07-08 0r 9th,10 th等,那么报告仍然需要报告2017-07-01到期的evaluation_date。

查询必须查找到期3个月到期,并带来该月的所有数据。我在10月10日运行查询带来下一个90天的数据,直到7月10日。但我将需要7天数据的所有日子......甚至超过10月10日。我该怎么做?

任何赞赏的输入

1 个答案:

答案 0 :(得分:0)

您可以使用此功能将日期截断到本月的第一天:

dateadd(month, datediff(month, 0, evaluation_date), 0)

如果您需要引入当月的所有评估(例如4月1日,即使是4月10日运行)

select 
  ... 
  , evaluation_date = dateadd(month, datediff(month, 0, evaluation_date), 0)
from t
where dateadd(month, datediff(month, 0, evaluation_date), 0) <= dateadd(month, 3, getdate())
  and dateadd(month, datediff(month, 0, evaluation_date), 0) >= dateadd(month, datediff(month, 0, getdate()), 0)

如果您只需要在运行日期(例如4月10日4月10日运行的当月)进行所有评估,那么

select 
  ... 
  , evaluation_date = dateadd(month, datediff(month, 0, evaluation_date), 0)
from t
where dateadd(month, datediff(month, 0, evaluation_date), 0) <= dateadd(month, 3, getdate()) 
  and dateadd(month, datediff(month, 0, evaluation_date), 0) >= convert(date,getdate())

以上例子中的这一部分带来了整个七月,例如: 7月30日即使在4月10日举行:

where dateadd(month, datediff(month, 0, evaluation_date), 0) <= dateadd(month, 3, getdate())