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

 更新时间:2019年07月18日 08:56:52   作者:张工502219048  
这篇文章主要介绍了sql server编写通用脚本实现获取一年前日期,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

问题:

  在数据库编程开发中,有时需要获取一年前的日期,以便以此为时间的分界点,查询其前后对应的数据量。例如:

1. 想查询截止到一年前当天0点之前的数据量,以及一年前当天0点开始到现在的数据量。
2. 想查询截止到一年前当天24点之前的数据量,以及一年前当天24点开始到现在的数据量。
3. 想查询截止到一年前当月1日0点之前的数据量,以及一年前当月1日0点开始到现在的数据量。
4. 想查询截止到一年前当月最后一天24点之前的数据量,以及一年前当月最后一天24点开始到现在的数据量。

  以上这四种情况的具体查询场景,有archive数据脚本开发之前对数据库数据量的分布情况进行统计等,也有根据当前日期动态计算一年来的增量增幅情况等。

  如果每次接到这样的需求需要获取一年前日期,然后每次重新思考怎么去实现肯定是不明智的,或者说公司内已经有人写了脚本实现,但其他同事遇到相同的问题,又重新构思一次,这样就比较浪费时间和精力,耗在这个细节上一些精力,有点像要做饭可是没有米就要先去买米的感觉,而且容易造成不同人写的脚本不统一,不利于代码规范化标准化的原则,不同的人跟进的时候还要去想想之前的人写的是什么逻辑。而且重新开发脚本的话,又需要重新进行自测,不利于提高工作效率。

解决方案:

  首先简单介绍一下基本的知识点:

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

脚本运行结果:

总结

以上所述是小编给大家介绍的sql server编写通用脚本实现获取一年前日期的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • SQLSERVER数据库备份后无法还原的解决办法

    SQLSERVER数据库备份后无法还原的解决办法

    有时候为了考虑数据安全我们都会备份数据库,sqlserver的备份格式一般都是bak结尾的,但覆盖时容易出问题,这里简单介绍下,需要的朋友可以参考下
    2013-08-08
  • SQL Server中通用数据库角色权限的处理详解

    SQL Server中通用数据库角色权限的处理详解

    这篇文章主要给大家介绍了关于SQL Server中通用数据库角色权限处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • SQL进行排序、分组、统计的10个新技巧分享

    SQL进行排序、分组、统计的10个新技巧分享

    这篇文章介绍了SQL进行排序、分组、统计的10个新技巧,有需要的朋友可以参考一下
    2013-09-09
  • 二种sql分页查询语句分享

    二种sql分页查询语句分享

    写出一条sql语句输出表UserInfo表中31到40记录(数据库为SQL Server,以自动增长的ID作为主键,注意ID可能不是连续的,这个就是写分页查询,下面给出二种写法
    2014-02-02
  • SQLServer设置客户端使用IP地址登录的图文详解

    SQLServer设置客户端使用IP地址登录的图文详解

    这篇文章主要介绍了SQLServer设置客户端使用IP地址登录的图文详解,本文通过图文并茂的形式给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • sql集合运算符使用方法

    sql集合运算符使用方法

    今天介绍数据库里面的集合运算符,它是指匹配集合的每一个结果。数据库集合运算符包括:IN、ANY、SOME、ALL以及EXISTS等
    2014-01-01
  • 数据库表的查询操作(实验二)

    数据库表的查询操作(实验二)

    这篇文章主要介绍了表的查询操作,包括单表查询、多表连接及查询、嵌套查询、集合查询等,需要的朋友可以参考下
    2015-08-08
  • 数据库清除日志文件(LDF文件过大)

    数据库清除日志文件(LDF文件过大)

    数据库清除日志文件,(LDF文件过大),一般情况下,有更简单的方法,需要在sqlserver查询执行。
    2009-11-11
  • Windows环境下实现批量执行Sql文件

    Windows环境下实现批量执行Sql文件

    这篇文章主要介绍了Windows环境下实现批量执行Sql文件的相关资料,需要的朋友可以参考下
    2021-10-10
  • SQL查询数据是否存在的实现示例

    SQL查询数据是否存在的实现示例

    在后端开发中,经常需要使用数据库来存储和管理数据,一个常见的任务是检查数据库中是否存在数据,本文主要介绍了SQL查询数据是否存在,感兴趣的可以了解一下
    2024-02-02

最新评论