我需要在我的项目中配置年份。 用户可以自己定义一年,比如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.**
有人可以帮忙吗? 提前致谢。 : - )
答案 0 :(得分:0)
我会这样做:
where year(dateadd(month, - @startmonth, datevalue)) = 'ThisYear'
如果您想利用datevalue
上的索引,这会变得有点复杂。但是,这是一个开始的地方。