SQL Server中的日期和時間:DATEADD()
我們現在處於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql server中對時間日期的操作SQLServer
- SQL Server日期計算(使用DATEADD和DATEDIFF函式)SQLServer函式
- SQL SERVER 時間和日期函式SQLServer函式
- SQL Server 裡的日期和時間函式SQLServer函式
- Sql Server系列:日期和時間函式SQLServer函式
- SQL server 日期與時間操作SQLServer
- sql server日期時間轉字串SQLServer字串
- 在SQL Server中獲得不包含時間部分的日期SQLServer
- SQL 獲取SQL Server中兩個日期之間的所有日期SQLServer
- SQL Server裡獲得不包含時間部分的日期SQLServer
- Sql Server函式全解(4):日期和時間函式SQLServer函式
- Sql Server函式全解(四)日期和時間函式SQLServer函式
- SQL SERVER 日期和時間資料型別及函式 (Transact-SQL)SQLServer資料型別函式
- SQL中DATEADD和DATEDIFF的使用方法SQL
- SQL 獲取SQL Server中日期最近7天之間的所有日期SQLServer
- SQL Server中timestamp(時間戳)SQLServer時間戳
- 日期和時間
- SQL Server 2008對日期時間型別的改進SQLServer型別
- SQL Server 字串和時間相互轉換SQLServer字串
- SQL server中的日期變數縮寫SQLServer變數
- Java日期和時間Java
- Java 中的時間日期 APIJavaAPI
- C/C++中的日期和時間函式C++函式
- js獲取指定時間日期和當前時間日期的相差多少時間JS
- sql server日期格式 sqlserver的日期格式SQLServer
- SQL SERVER 日期格式化、日期和字串轉換SQLServer字串
- Python 日期和時間Python
- JavaScriptFAQ(二十)——日期和時間JavaScript
- Java 8 日期和時間的APIJavaAPI
- 字串和日期時間的處理字串
- MySQL 的日期和時間函式MySql函式
- SQL Server中的臨時表和表變數SQLServer變數
- sql server中對日期欄位值的比較SQLServer
- sql server獲取時間格式SQLServer
- SQL server 中的臨時表SQLServer
- Qt:獲取日期和時間QT
- 【轉】Python 日期和時間Python
- java獲取日期和時間Java