【问题标题】:Automating Query for each month每月自动查询
【发布时间】:2018-06-06 16:49:07
【问题描述】:

我在下面有一个问题:

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-server tsql date


    【解决方案1】:

    你可以使用:

    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 Demo

    请注意,结束日期是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)) ;
    

    【讨论】:

    • 你应该注意到它可以在 SQL Server 2012+ 中使用
    • @B3S 是的,EOMONTH 可从 SQL Server 2012+ 开始,但我们有 2018 年,对 SQL Server 2008 的扩展支持即将结束。
    • 我希望你是对的 :) 我每天都有对 sqlserver 2003 环境的请求!
    • 是的,抱歉,我有 DATETIME,所以 AND 查询会改变还是只是最后一个限制?
    • @lad2025 太棒了!太感谢了! :)
    【解决方案2】:

    也考虑这种形式(它可以用于旧的 SQL Server 版本)。

    select a.ID, 
           a.Date_Reported, 
           b.Date_Received
    from tx_ext a 
    join tx b on b.id = a.id
    AND YEAR(b.Date_Reported) = CASE WHEN MONTH(GETDATE()) = 1
                                     THEN YEAR(GETDATE()) - 1
                                     ELSE YEAR(GETDATE())
                                END
    AND MONTH(b.Date_Reported = CASE WHEN MONTH(GETDATE()) = 1
                                     THEN 12
                                     ELSE MONTH(GETDATE()) - 1
                                END
    

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2016-03-14
      相关资源
      最近更新 更多