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编写通用脚本实现获取一年前日期的方法的更多相关文章
- sql server编写通用脚本自动统计各表数据量心得
工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...
- sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异
问题:工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表.修改表.删除表.新增字段.修改字段.删除字段等变化,如果人工检查,数据库表和字段比较多的 ...
- sql server编写简洁四则运算表达式脚本实现计算批次功能(C#等其它编程语言也能直接用此通用表达式)
问题: 在数据库编程开发中,有时会遇到数据量比较大的情况,如果直接大批量进行添加数据.修改数据.删除数据,就会是比较大的事务,事务日志也比较大,耗时久的话会对正常操作造成一定的阻塞.虽不至于达到删库跑 ...
- SQL Server中通用数据库角色权限处理
SQL Server中通用数据库角色权限处理 最近和同事在做数据库权限清理的事情,主要是删除一些账号:取消一些账号的较大的权限等,例如,有一些有db_owner权限,我们取消账号的数据库角色db_ ...
- SQL Server中通用数据库角色权限的处理详解
SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除 ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...
- SQL Server服务器名称与默认实例名不一致的修复方法
SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql ser ...
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- SQL Server远程连接 provider: Named Pipes Provider, error: 40 解决方法
置SQLServer,允许远程连接 按照上面的文章一步步配置后,远程连接出现下面所示的报错(Navicat 和 SQL Server Management Studio) SQL Server Man ...
随机推荐
- PySide——Python图形化界面入门教程(三)
PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...
- SQL之连接查询
这几天忙着笔试.面试,遇到了好几个关于数据库的试题,当然只是简单的多表查询.我第一时间都是选择select...from...where...group by...having...这个结构去写的.但 ...
- C#最基本的数据库增删改查
namespace access { public partial class Form1 : Form { //定义数据库的连接路径 string txtConn ="Provider=M ...
- C#读取数据库内容并转换成xml文件
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\bi ...
- oracle利用透明网关访问mssql
遇到一个客户,有个需求,想将mssql中的数据抽取到oracle中.经过上网查找,感觉gateway这个工具可以实现,因此就搭建实验环境进行测试.首先在oracle delivery上面下载对应的安装 ...
- QTcpSocket类和QTcpServer类
QTcpSocket 详细描述:QTcpSocket 类提供一个TCP套接字TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递QTcpSocket 是QAbstractSocket类 ...
- Qt使Release版本可调试
只需在pro文件中加入 QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_LFLAGS_RELEASE = $$ ...
- 数组Array
数组Array是最基本的数据结构,在内存中为一段定长连续内存,很多编程语言都有实现. 一.一维数组 下面代码实现了一维数组和它的遍历. clear并非清空数组,而是采用具体值对数组进行初始化. imp ...
- 十分钟了解Kubernetes
何为Kubernetes? 最简单的一句话来概括Kubernetes. 它就是一套成熟的商用服务编排解决方案.Kubernetes定位在Saas层,重点解决了微服务大规模部署时的服务编排问题. Kub ...
- hgoi#20190519
更好的阅读体验 来我的博客观看 T1-求余问题 Abu Tahun很喜欢回文. 一个数组若是回文的,那么它从前往后读和从后往前读都是一样的,比如数组{1},{1,1,1},{1,2,1},{1,3,2 ...