有没有一种方法可以在SQL中设置过去4个完整月份和当前月份的相对开始和结束日期?

有没有一种方法可以在SQL中设置过去4个完整月份和当前月份的相对开始和结束日期?,sql,sql-server,Sql,Sql Server,如果应用于今天,我想返回1/10/19到25/02/20的值 我目前正在使用下面的,但希望用能给我4个完整月份和当前部分月份的东西来代替它 where DATEDIFF (day,[SubOrderCompletionDate],GETDATE()) between 0 and 180 谢谢如果您想要完整的月份,只需将此更改为: where DATEDIFF(month, SubOrderCompletionDate, GETDATE()) between 0 and 3 DATEDI

如果应用于今天,我想返回1/10/19到25/02/20的值

我目前正在使用下面的,但希望用能给我4个完整月份和当前部分月份的东西来代替它

where DATEDIFF (day,[SubOrderCompletionDate],GETDATE()) between 0 and 180  

谢谢

如果您想要完整的月份,只需将此更改为:

where DATEDIFF(month, SubOrderCompletionDate, GETDATE()) between 0 and 3 

DATEDIFF统计两个日期之间的边界数。因此,给定日历月内的所有天数都返回相同的值。

我从字面上理解了您的陈述,因此假设今天是2020年2月29日,您希望2019年11月1日至2020年2月29日,而不是2019年10月1日至2020年2月29日:

SELECT * --This should be a column list, not *
FROM dbo.YourTable YT
WHERE YT.SubOrderCompletionDate >= CASE WHEN EOMONTH(GETDATE()) = CONVERT(date,GETDATE()) THEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 3,0) ELSE DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 4,0) END
  AND YT.SubOrderCompletionDate <= GETDATE()

如果不是这样,您只需要DATEADDMONTH、DATEDIFFMONTH、0、GETDATE-4,0,这将为您提供5个月的数据。

我根据语法添加了SQL Server标记。如果今天是2020年2月29日,您会期望什么?2019年11月1日至2020年2月29日?列上的DATEDIFF可能会对性能产生一些影响,因为索引将无法使用。@Larnu。绝对正确。不过OP是从DATEDIFF开始的,没有提到性能。在其他情况下,我不推荐DATEDIFF。