【问题标题】:how to get automatically previous month date range in SQL?如何在 SQL 中自动获取上个月的日期范围?
【发布时间】:2014-07-18 19:38:49
【问题描述】:

我有 2012 SQL Server 存储过程在每个月的五分之一自动运行,但我遇到的问题是提供上个月的日期范围,例如我需要有像 ...where datein between '2014-02-01' 和 '2014-02-28' 这样的子句,下个月它将更改为 ...where datein在 '2014-03-01' 和 '2014-02-31' 之间,以此类推。

谢谢

【问题讨论】:

标签: sql sql-server


【解决方案1】:

这应该可以工作

SELECT DATEADD(DAY,1,EOMONTH(GETDATE(),-2)) AS StartDate, EOMONTH(GETDATE(),-1) AS EndDate

在 WHERE 子句中更具体

WHERE @datein BETWEEN DATEADD(DAY,1,EOMONTH(GETDATE(),-2)) AND EOMONTH(GETDATE(),-1)

【讨论】:

  • 没错,因为 OP 写了“我有 2012 SQL”,所以把它写到请求中
  • 同意。我的评论是积极的。希望你没有采取任何其他方式。
  • @SeanLange,是的,我做到了,我很抱歉我在这里整周都因为一些小事而受到抨击,我有点沮丧。
  • 没问题。相信我,我自己也去过那里。不要抨击这里发生的小事。 :)
【解决方案2】:

您可以使用getdate() 和一些日期算术。这是一个相对简单的方法:

where datein >= cast(dateadd(month, -1, getdate() - day(getdate()) + 1) as date) and
      datein < cast(getdate() - day(getdate()) + 1)

这里的关键思想是减去当月的某一天,然后加 1 得到当月的第一天。

【讨论】:

    【解决方案3】:

    使用 getdate() 是不好的做法,而是在所有应用程序中使用 getutcdate()

    WHERE @datein BETWEEN DATEADD(DAY,1,EOMONTH(GETUTCDATE(),-2)) AND EOMONTH(GETUTCDATE(),-1)
    

    【讨论】:

      【解决方案4】:

      这是一种执行此操作的方法,因此您的日期将大于本月初并且小于下月初。

      datein >= dateadd(month, datediff(month, 0, getdate()), 0) --BeginningOfThisMonth
      and datein < dateadd(month, datediff(month, 0, getdate()) + 1, 0) --BeginningOfNextMonth
      

      【讨论】:

        【解决方案5】:

        这适用于我当前版本的 mysql:

        SELECT DATE_ADD(LAST_DAY(DATE_SUB(current_date, INTERVAL 2 MONTH)), INTERVAL 1 DAY) AS StartDate,
        LAST_DAY(DATE_SUB(current_date, INTERVAL 1 MONTH)) AS EndDate;
        

        【讨论】:

          【解决方案6】:

          可能会在 2 月尝试这个,因为原版只到了 2 月 27 日 在 DATEADD(DAY,1,EOMONTH(GETDATE(),-2)) 和 DATEADD(DAY,1,EOMONTH(GETDATE(),-1)) 之间

          【讨论】:

            【解决方案7】:

            请尝试

            DECLARE @date date=GETDATE()
            
            SELECT DATEADD(DAY,1,EOMONTH(@date,-2)) AS StartDate, EOMONTH(@date,-1) AS EndDate
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-11-25
              • 1970-01-01
              • 1970-01-01
              • 2021-12-05
              • 2016-08-09
              相关资源
              最近更新 更多