zoukankan      html  css  js  c++  java
  • 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,获取今年员工有效的生日,(毕竟现在企业很多都有生日福利,人事可以采用这样的方式进行统计)

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/9593763.html
Copyright © 2011-2022 走看看