首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置自定义年份并生成动态查询,以便在sql中过滤数据(年份为6-5月)

配置自定义年份并生成动态查询,以便在sql中过滤数据(年份为6-5月)
EN

Stack Overflow用户
提问于 2017-08-16 19:35:35
回答 1查看 27关注 0票数 0

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

下面是一个示例。

代码语言:javascript
复制
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' 

--我做过这个--但没起作用

代码语言:javascript
复制
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.** 

有人能帮上忙吗?提前谢谢。:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 19:38:02

我只会这么做:

代码语言:javascript
复制
where year(dateadd(month, - @startmonth, datevalue)) = 'ThisYear'

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45712511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档