我正在处理一个查询,我需要将所有结果拉到现在和一年前的日期。因此,如果明天运行查询,结果将与今天运行时的结果略有不同。如果我今天运行它,它基本上就像是说"日期是2015年6月1日到2016年6月1日之间。"明天,2015年6月2日至2016年2月6日,等等。
我认为我可以将其格式化为与涉及日期的常规WHERE
子句相同的格式。这就是我所拥有的:
WHERE CreateDate BETWEEN (DATEADD(Year,-1,GETDATE()) AND (GetDATE())
首先,我不确定DATEADD()
部分是否应该使用 - 我只是根据我在另一个论坛上阅读的内容进行了尝试。其次,我有一个红色波浪形的人告诉我AND
附近有语法错误。
最好的方法是什么?
答案 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()