sql server编写通用脚本实现获取一年前日期的方法

问题:
  在数据库编程开发中,有时须要获取一年前的日期,以便以此为时间的分界点,查询其先后对应的数据量。例如:
1. 想查询截止到一年前当天0点以前的数据量,以及一年前当天0点开始到如今的数据量。
2. 想查询截止到一年前当天24点以前的数据量,以及一年前当天24点开始到如今的数据量。
3. 想查询截止到一年前当月1日0点以前的数据量,以及一年前当月1日0点开始到如今的数据量。
4. 想查询截止到一年前当月最后一天24点以前的数据量,以及一年前当月最后一天24点开始到如今的数据量。
  以上这四种状况的具体查询场景,有archive数据脚本开发以前对数据库数据量的分布状况进行统计等,也有根据当前日期动态计算一年来的增量增幅状况等。
  若是每次接到这样的需求须要获取一年前日期,而后每次从新思考怎么去实现确定是不明智的,或者说公司内已经有人写了脚本实现,但其余同事遇到相同的问题,又从新构思一次,这样就比较浪费时间和精力,耗在这个细节上一些精力,有点像要作饭但是没有米就要先去买米的感受,并且容易形成不一样人写的脚本不统一,不利于代码规范化标准化的原则,不一样的人跟进的时候还要去想一想以前的人写的是什么逻辑。并且从新开发脚本的话,又须要从新进行自测,不利于提升工做效率。html

解决方案:
  首先简单介绍一下基本的知识点:
getdate()是获取当前日期;
dateadd能够对日期进行增减,在这里用来对年份减小1【dateadd(year, -1, 日期字符串)】,也能够用来对月份增长1【dateadd(month, 1, 日期字符串)】;
convert能够对日期进行字符串截取转换操做,在这里能够只截取形如2019-07-17的年月日【convert(varchar(10), 日期字符串, 120))】,也能够只截取形如2019-07的年月部分【convert(varchar(7), 日期字符串, 120))】。
  而后就是针对上面4个问题对应的4个解决方法:
1. 最简单,对当前日期进行减小1年的运算,而后只截取年月日。
2. 先对当前日期进行增长1天的运算,而后再减小1年,最后只截取年月日。
3. 先对当前日期进行截取年月操做,而后再指定为当月01日,再减小1年,最后只截取年月日。
4. 先对当前日期进行截取年月操做,而后再指定为当月01日,再减小1年,并加上1个月,最后只截取年月日。
  最后就能够直接在查询脚本条件中使用这个时间节点:
查询统计时间节点以前:select count(*) from 表 where 时间字段 < @datePoint
查询统计时间节点开始到如今:select count(*) from 表 where 时间字段 >= @datePoint数据库

脚本:
编程

/*
    功能:获取一年前日期
    做者:zhang502219048
    脚原本源:https://www.cnblogs.com/zhang502219048/p/11198789.html
*/

--1.截止到一年前当天0点
declare @datePoint datetime = convert(varchar(10), dateadd(year, -1, getdate()), 120)
select @datePoint as DatePoint
go

--2.截止到一年前当天24点
declare @datePoint datetime = convert(varchar(10), dateadd(year, -1, dateadd(day, 1, getdate())), 120)
select @datePoint as DatePoint
go

--3.截止到一年前当月1日0点
declare @datePoint datetime = convert(varchar(10), dateadd(year, -1, convert(varchar(7), getdate(), 120) + '-01'), 120)
select @datePoint as DatePoint
go

--4.截止到一年前当月最后一天24点
declare @datePoint datetime = convert(varchar(10), dateadd(month, 1, dateadd(year, -1, convert(varchar(7), getdate(), 120) + '-01')), 120)
select @datePoint as DatePoint
go

脚本运行结果:
 
总结:
博主在这里就为你们分享了本身在工做过程当中所编写的生成一年前日期数据库脚本的方法,若是你也须要能够直接拿来主义应用到实际工做中而不用进行重复构思编程。 spa

相关文章
相关标签/搜索