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秒マイナス
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)
以上、「SQL Server 便利な日付関数:DATEADD DATEDIFF」でした。