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,獲取今年員工有效的生日,(畢竟現在企業很多都有生日福利,人事可以采用這樣的方式進行統計)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM