如何在SQL中自动获取上个月的日期范围?

时间:2014-07-18 19:38:49

标签: sql sql-server

我有一个2012年的SQL Server存储过程每个月五分钟自动运行,但我遇到的问题是提供上个月的日期范围,例如我需要有像这样的条款......其中datein介于'2014-02-01'和'2014-02-28'之间,下个月它会将其更改为 ...其中datein在'2014-03-01'和'2014-02-31'之间等等。

感谢

7 个答案:

答案 0 :(得分:9)

这应该有效

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)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

这里的关键想法是减去当月的日期,并加1以获得当月的第一天。

答案 3 :(得分:0)

这是一种方法,因此您的日期将大于本月初且低于下个月的开头。

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

答案 4 :(得分:0)

这适用于我当前版本的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;

答案 5 :(得分:0)

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

答案 6 :(得分:0)

请试试

DECLARE @date date=GETDATE()

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