SQL Server中的日期和時間:DATEADD()

Tybyq發表於2018-11-24

我們現在處於SQL Server和Azure SQL資料庫中關於日期和時間的長篇系列的主頁。

本週我們將討論日期和時間中我最喜歡的T-SQL函式之一:   DATEADD ()

句法

與類似的功能一樣,   DATEADD  可以對日期和時間進行算術運算。 語法很簡單:

DATEADD (datepart, number, date)

該   number  部分必須是整數,並且必須在日期部分的可接受值範圍內。

該   datepart  部分必須是以下日期部分之一(我們在 之前的   帖子中 看到   ):

DATEPART 縮略語
是的,yyyy
25美分硬幣 qq,q
mm,m
DAYOFYEAR dy,y
dd,d
wk,ww
平日 dw,w
小時 HH
分鐘 mi,n
第二 ss,s
毫秒 女士
微秒 MCS
納秒 NS

雖然   DATEADD  支援上表中所示的縮寫,但我們應盡一切努力使用完整表示式來確保程式碼的清晰度。 如果我們使用縮寫,SQL Server不會執行得更快。

另請注意,雖然我們可以使用納秒加或減   DATEADD ,但 DATETIME2  資料型別 的最小粒度為   100納秒,因此需要考慮舍入。

退貨型別

DATEADD  將使用 date  引數中 使用的資料型別返回結果   例如,如果我們使用以 YYYYMMDD  格式 表示日期的文字字串   ,則返回型別將是一個   DATETIME  值,因為文字字串被隱式轉換為   DATETIME

SELECT DATEADD(DAY,1,'20181031')
- 返回DATETIME值'2018-11-01 00:00:00.000'

但是,如果我們使用   DATETIME2  輸入值,結果將是一個   DATETIME2  值。

SELECT DATEADD(納秒,100,CAST('20181031'  AS DATETIME2))
- 返回DATETIME2值'2018-10-31 00:00:00.0000001'

加減

我們之前看到過   DATEADD  可以用於加法     減法,這使得向後和向前計算值變得容易。 我們假設我們需要計算100天前的時間點。 如果我們以今天為出發點,它將如下所示:

DECLARE  @dt DATETIME2 = SYSUTCDATETIME();
SELECT  @dt  AS [TimeNow],DATEADD(DAY, - 100,@ dt)AS [TimeThen];

注意在部分中使用負號   number  。 結果如下:

TimeNow: 2018-10-31 09:17:21.7866500
TimeThen: 2018-07-23 09:17:21.7866500

幾個月的算術

關於這個功能的最後一個想法。 在增加或減少月數時,請注意不包含31天的月份。 例如,讓我們在2018年2月底新增一個月:

SELECT DATEADD(MONTH,1,'20180228')
- 返回DATETIME值'20180328'

但是,如果我們在2018年1月底新增一個,兩個或三個月,我們會看到不同的結果:

SELECT DATEADD(MONTH,1,'20180131');
- 返回DATETIME值'20180228'

SELECT DATEADD(MONTH,2,'20180131');
- 返回DATETIME值'20180331'

SELECT DATEADD(MONTH,3,'20180131');
- 返回DATETIME值'20180430'

DATEADD  是一個非常有用的系統函式在T-SQL中新增和減去日期和時間的值,我廣泛使用。 只要我們記住它圍繞資料型別和數月長度的怪癖,它就會非常強大。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2221522/,如需轉載,請註明出處,否則將追究法律責任。

相關文章