sqlserver中根据日期时间获取秒数(sql server编写通用脚本实现获取一年前日期的方法)
sqlserver中根据日期时间获取秒数
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编写通用脚本实现获取一年前日期的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
- mysql中innodb的特性(Mysql InnoDB的锁定机制实例详解)
- sql根据条件查出两条一样的数据(SQL中遇到多条相同内容只取一条的最简单实现方法)
- php不能用mysql(php写入mysql中文乱码的实例解决方法)
- sysbenchmysql性能跑分(MySQL性能压力基准测试工具sysbench的使用简介)
- mysql有数据但筛选值为空(解决从集合运算到mysql的not like找不出NULL的问题)
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- sqlserver备份整表数据的语句(SqlServer批量备份多个数据库且删除3天前的备份)
- 如何使用HttpModule实现sql防注入
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- SqlServer 表连接教程(问题解析)(SqlServer 表连接教程问题解析)
- 怎么查看mysql计划执行情况(详解 MySQL 执行计划)
- mysql用户删除了如何设置(MySQL两种删除用户语句的区别delete user和drop user)
- mysql 分片键规则(MySql8 WITH RECURSIVE递归查询父子集的方法)
- mysql中mergeinto的用法(MySQL中exists、in及any的基本用法)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- mysql乐观锁与mvcc(MySQL中的乐观锁,悲观锁和MVCC全面解析)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
- 《红 雄安》系列广播剧第一集 水上奇兵雁翎队(雄安系列广播剧第一集)
热门推荐
- 用python查看运行进程(在Python运行时动态查看进程内部信息的方法)
- 如何激活ubunturoot账号(欧洲vps安装Ubuntu系统如何设置root登录)
- h5页面快速制作方法(h5网页水印SDK的实现代码示例)
- laravel框架详解(laravel 5.3 单用户登录简单实现方法)
- python爬虫request方法介绍(详解Python3网络爬虫二:利用urllib.urlopen向有道翻译发送数据获得翻译结果)
- 织梦调用栏目内容(织梦标签channel实现列表页调用当前栏目的子类)
- html5拖拽标签(Html5原生拖拽相关事件简介以及基础实现)
- thinkphp5框架怎么打开(thinkphp5.1框架中容器Container和门面Facade的实现方法分析)
- windows服务器安全设置经验(Windows 2016 服务器安全设置)
- Ext.DomHelper用法
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9