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

  • 相关阅读:
    刷题--两个链表生成相加链表
    机器学习与模式识别之——组合模型
    阅读笔记--CSI fingerprinting with SVM regression to achieve device-free passive localization
    复制含有随机指针节点的链表
    将数组排列成左边小,中间相等,右边大的形式 给定链表节点数组和某个值
    EDA(Experimental Data Analysis)之常见分析方法总结--以kaggle的泰坦尼克号之灾为例
    Data Analysis with Python : Exercise- Titantic Survivor Analysis | packtpub.com
    ubuntu16.04配置搜狗输入法
    用栈来求解hanoi塔问题
    codeforces 792 B. Counting-out Rhyme 约瑟夫环
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/9593763.html
Copyright © 2011-2022 走看看