在哪里约会BETWEEN(一年前)和(现在)

时间:2016-06-01 17:29:05

标签: sql sql-server

我正在处理一个查询,我需要将所有结果拉到现在和一年前的日期。因此,如果明天运行查询,结果将与今天运行时的结果略有不同。如果我今天运行它,它基本上就像是说"日期是2015年6月1日到2016年6月1日之间。"明天,2015年6月2日至2016年2月6日,等等。

我认为我可以将其格式化为与涉及日期的常规WHERE子句相同的格式。这就是我所拥有的:

WHERE CreateDate BETWEEN (DATEADD(Year,-1,GETDATE()) AND (GetDATE())

首先,我不确定DATEADD()部分是否应该使用 - 我只是根据我在另一个论坛上阅读的内容进行了尝试。其次,我有一个红色波浪形的人告诉我AND附近有语法错误。

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

你可以使用DATEADD并且它知道闰年,所以即使在闰年上运行,添加年份也应该是安全的(尽管我仍然希望保持额外的安全并添加天数 - 取决于你希望它在闰年运行时的行为方式。)

语法错误的原因是您的括号。我数盯着但只有结束。我想你想要

 BETWEEN DATEADD(Year,-1,GETDATE()) AND GetDATE()

答案 1 :(得分:1)

删除查询中的额外语法(

WHERE CreateDate BETWEEN cast(DATEADD(yyyy,-1,GETDATE()) as date) AND cast(GETDATE() as date)

要忽略日期的时间部分,请使用cast转换getdate(),将一年减去date的结果。这假定createdate的数据类型为date

答案 2 :(得分:1)

使用年份或数月。不要使用天,因为它不会占闰年:

WHERE CreateDate BETWEEN DATEADD(Year,-1,GETDATE()) AND GETDATE()

WHERE CreateDate BETWEEN DATEADD(mm,-12,GETDATE()) AND GETDATE()