SQL语句计算距离今天生日还差几天
转载于:http://www.w3dev.cn/article/20110125/sql-compute-birthdate-now-days.aspx
SQL语句计算距离生日还差几天原理很简单,将要比较的2个日期的年份统一成一样的,然后再使用datediff函数计算记录的数据和当前的日期比较得到相距的天数。
将年份统一成一样的时候需要注意瑞年的问题,需要将当前的时间的年份统一成记录的,而不是将记录的年份统一成当前日期的年份。要不当前为平年,当记录为瑞年并且为2月29号时间转换就出错了。具体示例看下面的示例
要实现年份统一可以使用字符串操作函数substring,或者时间操作函数datepart。
下面为SQL语句计算距离生日还差几天的具体代码,创建时间为记录时间的【如同生日一样】。
--第一种方法,substring函数操作,将记录年份统一为当前的,当当前为平年碰到记录为瑞年的2月29号会出错,除非当前年丰也为瑞年,这个语句有错误,不推荐 declare @d datetime set @d=getdate() select addtime,datediff(dd,getdate(),convert(char(4),getdate(),120)+'-'+substring(convert(char(10),addtime,120),6,5))as days,id from information order by id print datediff(ms,@d,getdate())
正确写法1:
--第一种方法,substring函数操作,更正后,年份要和生日的一直才行。要不碰到瑞年的记录会出错 耗时大概350ms左右 declare @d datetime set @d=getdate() select addtime,datediff(dd,convert(char(4),addtime,120)+'-'+substring(convert(char(10),getdate(),120),6,5),addtime)as days from information print datediff(ms,@d,getdate())
正确写法2:
--第二种方法,datepart函数操作,耗时大概150ms左右 declare @d datetime set @d=getdate() select addtime,datediff(dd ,cast(datepart(yyyy,addtime) as char(4))+'-'+cast(datepart(mm,getdate()) as char(4))+'-'+cast(datepart(dd,getdate()) as char(4)) ,addtime)as days from information print datediff(ms,@d,getdate())
执行效果如下:
declare @d datetime set @d=getdate() //获取当前时间 select 事务所主任ID,创建时间,datediff(dd ,cast(datepart(yyyy,创建时间) as char(4))+'-'+cast(datepart(mm,getdate()) as char(4))+'-'+cast(datepart(dd,getdate()) as char(4)) ,创建时间)as days from [TRA].[dbo].[事务所主任] print datediff(ms,@d,getdate())
执行结果如下:
应用场景:我们可以取days >= 0,获取今年员工有效的生日,(毕竟现在企业很多都有生日福利,人事可以采用这样的方式进行统计)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术