我正在使用SQL Server 2014,我有以下T-SQL查询从视图表中提取数据:
SELECT * from MyView
WHERE StayDate >= '2014-07-01'
我需要为此查询添加一个过滤器,该过滤器将应用于名为“CreatedOn”的字段(它是datetime字段)。过滤器需要根据上一年的相同日期过滤“CreatedOn”。
因此,如果今天的日期是'2015-10-26',我的查询应该是这样的:
SELECT * from MyView
WHERE StayDate >= '2014-07-01'
AND CreatedOn <= '2014-10-26'
由于此查询将在PowerPivot环境中使用,因此我按照以下思路进行思考:
SELECT * from MyView
WHERE StayDate >= '2014-07-01'
AND CreatedOn <= getdate()
如何修改getdate()部分,使其成为去年的相同日期?
答案 0 :(得分:6)
要获取当前日期之前一年的日期,您可以使用:
DATEADD(YEAR, -1, GETDATE())
但是,由于这包括时间组件,因此可能会遗漏某些记录。你应该改用它:
< DATEADD(DAY, 1, DATEADD(YEAR, -1, DATEDIFF(DAY, '19000101', GETDATE())))
以上将返回当前加一天之前一年的日期。也就是说,如果今天的日期为'2015-10-26
&#39;,则上述内容将返回'2014-10-27'
。请注意,这将没有时间组件,您应该使用<
进行比较。
答案 1 :(得分:0)
SELECT getdate() - 365
即
SELECT * from MyView
WHERE StayDate >= '2014-07-01'
AND CreatedOn <= getdate() - 365
编辑:不适用于leap年。谢谢@mechnicov。