首页 > 解决方案 > 每月自动查询

问题描述

我在下面有一个查询:

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported >= convert( datetime, '2018-05-01' ) 
AND b.Date_Reported <= convert( datetime, '2018-05-31' )

如您所见,我目前正在手动设置 5 月(上个月)的日期。我怎样才能改变我的查询,无论我在哪个月份,我总是运行完整的前一个月。例如,这个月是六月,所以我想单独从五月开始计算值。下个月是七月,所以我想跑六月。

我想自动化这个,所以我不需要每个月手动输入日期

谢谢

标签: sql-servertsqldate

解决方案


你可以使用:

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) 
AND b.Date_Reported <= EOMONTH(GETDATE());

DBFiddle 演示

请注意结束日期,30/06/2018 00:00:00所以我假设您将 Date_Reported 存储为 DATE(而不是 DATETIME)。如果您有时间部分,您需要更改为:

AND b.Date_Reported < DATEADD(d,1,EOMONTH(GETDATE())) 

编辑

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported>=DATEADD(month,-1,DATEADD(month,DATEDIFF(month,0,GETDATE()),0))
AND b.Date_Reported<DATEADD(d,1,EOMONTH(GETDATE(),-1)) ;

推荐阅读