SQL中DATEADD和DATEDIFF的用法示例引見。本站提示廣大學習愛好者:(SQL中DATEADD和DATEDIFF的用法示例引見)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL中DATEADD和DATEDIFF的用法示例引見正文
平日,你須要取得以後日期和盤算一些其他的日期,例如,你的法式能夠須要斷定一個月的第一天或許最初一天。你們年夜部門人年夜概都曉得如何把日期停止朋分(年、月、日等),然後僅僅用朋分出來的年、月、日等放在幾個函數上鉤算出本身所須要的日期!
在這篇文章裡,我將告知你若何應用DATEADD和DATEDIFF函數來盤算出在你的法式中能夠你要用到的一些分歧日期。
在應用本文中的例子之前,你必需留意以下的成績。年夜部門能夠不是一切例子在分歧的機械上履行的成果能夠紛歧樣,這完整由哪一天是一個禮拜的第一天這個設置決議。第一天(DATEFIRST)設定決議了你的體系應用哪一天作為一周的第一天。一切以下的例子都是以禮拜天作為一周的第一天來樹立,也就是第一天設置為7。假設你的第一天設置紛歧樣,你能夠須要調劑這些例子,使它和分歧的第一天設置符合合。你可以經由過程@@DATEFIRST函數來檢討第一天設置。
為了懂得這些例子,我們先溫習一下DATEDIFF和DATEADD函數。DATEDIFF函數盤算兩個日期之間的小時、天、周、月、年等時光距離總數。DATEADD函數盤算一個日期經由過程給時光距離加減來取得一個新的日期。要懂得更多的DATEDIFF和DATEADD函數和時光距離可以浏覽微軟聯機贊助。
應用DATEDIFF和DATEADD函數來盤算日期,和原來從以後日期轉換到你須要的日期的斟酌辦法有點分歧。你必需從時光距離這個方面來斟酌。好比,從以後日期到你要獲得的日期之間有若干時光距離,或許,從明天到某一天(好比1900-1-1)之間有若干時光距離,等等。懂得如何著眼於時光距離有助於你輕松的懂得我的分歧的日期盤算例子。
一個月的第一天
第一個例子,我將告知你若何從以後日期去這個月的最初一天。請留意:這個例子和這篇文章中的其他例子都將只應用DATEDIFF和DATEADD函數來盤算我們想要的日期。每個例子都將經由過程盤算但前的時光距離,然落後行加減來獲得想要盤算的日期。
這是盤算一個月第一天的SQL 劇本:
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我們把這個語句離開來看看它是若何任務的。最焦點的函數是getdate(),年夜部門人都曉得這個是前往以後的日期和時光的函數。下一個履行的函數DATEDIFF(mm,0,getdate())是盤算以後日期和“1900-01-01 00:00:00.000”這個日期之間的月數。記住:時代和時光變量和毫秒一樣是從“1900-01-01 00:00:00.000”開端盤算的。這就是為何你可以在DATEDIFF函數中指定第一個時光表達式為“0”。下一個函數是DATEADD,增長以後日期到“1900-01-01”的月數。經由過程增長預界說的日期“1900-01-01”和以後日期的月數,我們可以取得這個月的第一天。別的,盤算出來的日期的時光部門將會是“00:00:00.000”。
這個盤算的技能是先盤算以後日期到“1900-01-01”的時光距離數,然後把它加到“1900-01-01”下去取得特別的日期,這個技能可以用來盤算許多分歧的日期。下一個例子也是用這個技能從以後日期來發生分歧的日期。
本周的禮拜一
這裡我是用周(wk)的時光距離來盤算哪一天是本周的禮拜一。
Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
一年的第一天
如今用年(yy)的時光距離來顯示這一年的第一天。
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第一天
假設你要盤算這個季度的第一天,這個例子告知你該若何做。
Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
當天的子夜
已經須要經由過程getdate()函數為了前往時光值截失落時光部門,就會斟酌到以後日期是否是在子夜。假設如許,這個例子應用DATEDIFF和DATEADD函數來取得子夜的時光點。
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深刻DATEDIFF和DATEADD函數盤算
你可以明確,經由過程應用簡略的DATEDIFF和DATEADD函數盤算,你可以發明許多分歧的能夠成心義的日期。
今朝為止的一切例子只是僅僅盤算以後的時光和“1900-01-01”之間的時光距離數目,然後把它加到“1900-01-01”的時光距離下去盤算出日期。假定你修正時光距離的數目,或許應用分歧的時光距離來挪用DATEADD函數,或許減去時光距離而不是增長,那末經由過程這些小的調劑你可以發明和多分歧的日期。
這裡有四個例子應用別的一個DATEADD函數來盤算最初一天來分離調換DATEADD函數前後兩個時光距離。
上個月的最初一天
這是一個盤算上個月最初一天的例子。它經由過程從一個月的最初一天這個例子上減去3毫秒來取得。有一點要記住,在Sql
Server中時光是准確到3毫秒。這就是為何我須要減去3毫秒來取得我要的日期和時光。
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
盤算出來的日期的時光部門包括了一個Sql
Server可以記載的一天的最初時辰(“23:59:59:997”)的時光。
客歲的最初一天
銜接下面的例子,為了要獲得客歲的最初一天,你須要在本年的第一天上減去3毫秒。
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
本月的最初一天
如今,為了取得本月的最初一天,我須要略微修正一下取得上個月的最初一天的語句。修正須要給用DATEDIFF比擬以後日期和“1900-01-01”前往的時光距離上加1。經由過程加1個月,我盤算出下個月的第一天,然後減去3毫秒,如許就盤算出了這個月的最初一天。這是盤算本月最初一天的SQL劇本。
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
今年的最初一天
你如今應當控制這個的做法,這是盤算今年最初一天劇本
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
本月的第一個禮拜一
好了,如今是最初一個例子。這裡我要盤算這個月的第一個禮拜一。這是盤算的劇本。
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
在這個例子裡,我應用了“本周的禮拜一”的劇本,並作了一點點修正。修正的部門是把本來劇本中“getdate()”部門調換成盤算本月的第6天,在盤算頂用本月的第6天來調換以後日期使得盤算可以取得這個月的第一個禮拜一。
總結
經由過程應用這個盤算日期的時光距離的數學辦法,我發明為了顯示兩個日期之間距離的有效歷法是有價值的。留意,這只是盤算出這些日期的一種辦法。要切記,還有許多辦法可以獲得雷同的盤算成果。假設你有其他的辦法,那很不錯,如果你沒有,我願望這些例子可以給你一些啟示,當你要用DATEADD和DATEDIFF函數盤算你法式能夠要用到的日期時。