首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sql中选择动态日期范围

在sql中选择动态日期范围
EN

Stack Overflow用户
提问于 2019-01-04 23:43:07
回答 2查看 1.9K关注 0票数 0

我有一个查询,它根据他们的活动日期带来数据。查询如下:

代码语言:javascript
运行
复制
where al.ACTIVITY_DATE between '2017-01-01 00:00:00.000' and '2018-12-01 00:00:00.000'

它选择此数据范围内的所有活动。

现在是2019年,我需要将我的日期范围更改为2019-12-01 00:00:00:.000

我不想做的是每年手动更改该报告。是否可以选择最近两年的数据和今年到2019年12月31日的数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-04 23:50:30

只需执行以下操作:

代码语言:javascript
运行
复制
WHERE al.ACTIVITY_DATE BETWEEN DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
                           AND DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)

这将动态地使其成为过去两年的数据。

这是前一年的开始

代码语言:javascript
运行
复制
DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))

这是本年度的年末。

代码语言:javascript
运行
复制
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)
票数 3
EN

Stack Overflow用户

发布于 2019-01-05 00:15:31

我认为这是推导出去年年初的最简单方法:

代码语言:javascript
运行
复制
DECLARE @start date = DATEFROMPARTS(YEAR(GETDATE())-1,1,1);

-- 2018-01-01

然后,这是执行去年和今年的完整日期范围查询的最简单方法,而无需担心数据类型、舍入等(read this to see why BETWEEN is a bad idea)。

代码语言:javascript
运行
复制
...
WHERE al.ACTIVITY_DATE >= @start 
  AND al.ACTIVITY_DATE <  DATEADD(YEAR, 2, @start); -- 2020-01-01
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54042064

复制
相关文章

相似问题

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