我有一个在我的项目中配置年份的要求。用户可以定义自己的年份,例如从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.** 有人能帮上忙吗?提前谢谢。:-)
发布于 2017-08-16 19:38:02
我只会这么做:
where year(dateadd(month, - @startmonth, datevalue)) = 'ThisYear'如果您想要利用datevalue上的索引,这就会变得有点复杂。然而,这是一个开始的地方。
https://stackoverflow.com/questions/45712511
复制相似问题