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