SQL Server 便利な日付関数:DATEADD DATEDIFF

SQL Server 便利な日付関数:DATEADD DATEDIFF

Sql Server は、日付の演算を行える関数を2つ実装しています。

DATEADD

DATEADDは引数に指定した日時要素*間隔分を日時に加算(減算)する関数です。
DATEADD(日時要素, 間隔, 日時)
日時要素は、以下のように指定します。
 年:year, yy, yyy
 四半期:quarter, qq, q
 月:month, mm, m
 日:dayofyear, dy, y, day, dd, d
 週:week, wk, ww
 時:hour, hh
 分:minute, mi, n
 秒:second, ss, s
 ミリ秒:millisecond, ms
 マイクロ秒:microsecond, mcs
 ナノ:nanosecond, ns

間隔は、整数値で指定します。加算ならそのまま、減算なら負の整数値で指定します。
日時は、演算を行いたい日付型データです。

以下の例は、現在日時に対し、いくつかの演算を行っています。

declare @dd datetime
set @dd = getdate()

--DATEADD
select '--基準日--' as 加算データ, @dd as 結果
union all
select '1年プラス', DATEADD(year, 1, @dd)			--1年プラス
union all
select '1年マイナス', DATEADD(year, 1, @dd)		--1年マイナス
union all
select '1月プラス', DATEADD(month, 1, @dd)			--1月プラス
union all
select '1月マイナス', DATEADD(month, -1, @dd)		--1月マイナス
union all
select '1日プラス', DATEADD(day, 10, @dd)			--1日プラス
union all
select '1日マイナス', DATEADD(day, -10, @dd)		--1日マイナス
union all
select '1時間プラス', DATEADD(hour, 1, @dd)		--1時間プラス
union all  
select '1時間マイナス', DATEADD(hour, -1, @dd)		--1時間マイナス
union all  
select '1分プラス', DATEADD(minute, 10, @dd)		--10分プラス  
union all  
select '1分マイナス', DATEADD(minute, -10, @dd)	--10分マイナス  
union all  
select '30秒プラス', DATEADD(second, 30, @dd)	--30秒プラス
union all  
SELECT '30秒マイナス', DATEADD(second, -30, @dd)	--30秒マイナス
DATEADD 結果

DATEADD 結果

DATEDIFF

DATEDIFFは、指定した日時要素単位で 2 つの日付の時間間隔を調べることができます。たとえば、2 つの日付の間の日数や、現在から年末までの週の数などを求めることができます。
DATEDIFF(日時要素, 開始日時, 終了日時, [,firstdayofweek or firstweekofyear])

下の例で @dend に設定する数値を替えいろいろ試して挙動を確認してください。

declare @dstart datetime
declare @dend datetime

set @dstart = getdate()
set @dend = dateadd(day, 100, @dstart)
select @dstart as 開始日時, @dend as 終了日時 

select 'DATEDIFF(year, @dstart, @dend)' as 式, DATEDIFF(year, @dstart, @dend) as 差
union all
select 'DATEDIFF(month, @dstart, @dend)', DATEDIFF(month, @dstart, @dend)
union all
select 'DATEDIFF(week, @dstart, @dend)', DATEDIFF(week, @dstart, @dend)
union all
select 'DATEDIFF(day, @dstart, @dend)', DATEDIFF(day, @dstart, @dend)
union all
select 'DATEDIFF(hour, @dstart, @dend)', DATEDIFF(hour, @dstart, @dend)
union all
select 'DATEDIFF(minute, @dstart, @dend)', DATEDIFF(minute, @dstart, @dend)
DATEDIFF 結果

DATEDIFF 結果

以上、「SQL Server 便利な日付関数:DATEADD DATEDIFF」でした。