配置自定义年份并生成动态查询以过滤sql中的数据(从6月到5月)

时间:2017-08-16 11:35:35

标签: sql sql-server datetime

我需要在我的项目中配置年份。 用户可以自己定义一年,比如6月到5月或4月到3月等。 我在后端使用MS SQL,现在,我必须生成一个动态sql查询来检查给定日期是否在“今年”中用于过滤数据。

以下是一个示例,

DECLARE @Sample TABLE ([KEY] int , [DateValue] DateTime)

INSERT INTO @Sample ([KEY], [DateValue])  
            SELECT 1, '2017-01-16 11:14:39.683' 
UNION ALL   SELECT 2, '2017-06-16 11:14:39.683' 
UNION ALL   SELECT 3, '2017-08-16 11:14:39.683' 

-- If the year is defined as June to May then
-- Selecting DateValue for " This Year " should return rows 2 & 3 Only

--SELECT * FROM @Sample Where  [DateValue] = 'ThisYear' 

- 我这样做了 - 但没有工作

Declare @startmonth int = 5

SELECT * FROM @Sample 
Where  [DateValue] BETWEEN 
DATEADD ( m, @startmonth - DATEPART(m,DATEADD(m, DATEDIFF(m, 0, GETUTCDATE()),0)), DATEADD(m, DATEDIFF(m, 0, GETUTCDATE()),0))
AND  DATEADD(m,12, DATEADD ( m, @startmonth - DATEPART(m,DATEADD(m, DATEDIFF(m, 0, GETUTCDATE()),0)), DATEADD(m, DATEDIFF(m, 0, GETUTCDATE()),0)))

-- **When @startmonth is greater than 6 , this query fails.** 

有人可以帮忙吗? 提前致谢。 : - )

1 个答案:

答案 0 :(得分:0)

我会这样做:

where year(dateadd(month, - @startmonth, datevalue)) = 'ThisYear'

如果您想利用datevalue上的索引,这会变得有点复杂。但是,这是一个开始的地方。