如何从当前日期加上过去12个月加上额外的天数,直到检索到的最后一个月的第一天

时间:2015-08-17 11:41:32

标签: sql sql-server sql-server-2008

从特定日期开始过去12个月非常简单,可以通过SQL-server中的以下命令检索。答案是2014-08-17。

select Dateadd(Month, -12, '2015-08-17')

我想要的是过去12个月,但结束于2014-08- 01 (在上述情况下),而不是在月中的任何地方。

3 个答案:

答案 0 :(得分:5)

使用DATEADDDATEDIFF

DECLARE @ThisDate DATE = '20150817'
SELECT DATEADD(YEAR, -1, DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @ThisDate), '19000101'))

有关更常见的日期例程,请参阅Lynn Pettis撰写的article

WHERE条款中使用:

DECLARE @ThisDate DATE = '20150817'
SELECT *
FROM <your_table>
WHERE
    <date_column> >= DATEADD(YEAR, -1, DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @ThisDate), '19000101'))

答案 1 :(得分:3)

SELECT dateadd(month,datediff(month,0,getdate())-12,0)

结果是

-----------------------
2014-08-01 00:00:00.000

所以where子句应该是

WHERE datecol >=dateadd(month,datediff(month,0,getdate())-12,0)

从去年同月的01月1日开始获取所有数据

答案 2 :(得分:1)

如果你想要去年当月第一天以来的所有记录,那么你可以使用:

where <somedate> >= dateadd(day, 1 - day(dateadd(month, -12, getdate()),
                            dateadd(month, -12, getdate()))

对于除了 2月29日以外的所有日子,你可以使用更简单的:

where <somedate> >= dateadd(day, 1 - day(getdate()),
                            dateadd(month, -12, getdate))