SQL SERVER 日付の加算、減算

SQL SERVER

日付の加算、減算

SQL Serverは、DATEADD関数を使って日付型の値に日時を加算、減算する事ができます。

構文:DATEADD(element, value, target)

elementには日付要素を記述します。
日付要素は以下のようなものがあります。
year(yy or yyyy) : 年
quarter(qq or q) : 四半期
month(mm or m) : 月
dayofyear(dy or y) : 年始からの日数
day(dd, d) : 日
week(wk, w) : 週
weekday(dw) : 曜日
hour(hh) : 時
minute(mi or n) : 分
second(ss) : 秒
millisecond(ms, s) : ミリ秒

valueには加算、減算した値を設定します。
targetには、基準となる日付型の値を設定します。

日付の加算

日の加算をしたい場合は、elementに「day」、valueに「加算したい日数」、targetに基準日を設定します。

例えば、現在から5日後の日付が欲しい場合は、
DATEADD(day, 5, getdate())
で取得できます。

例えば、現在から12時間後の日付が欲しい場合は、
DATEADD(hour, 12, getdate())
で取得できます。

日付の減算

日の減算をしたい場合は、elementに「day」、valueに「減算したい日数」、targetに基準日を設定します。
減算したい日数は、マイナスで指定します。
1日前なら-1、2日前なら-2

例えば、現在から5日前の日付が欲しい場合は、
DATEADD(day, -5, getdate())
で取得できます。

例えば、現在から12時間前の日付が欲しい場合は、
DATEADD(hour, -12, getdate())
で取得できます。

上の説明でほぼ理解できたと思いますが、一応例を載せておきます。

declare @d datetime
declare @d2 datetime
declare @d3 datetime
declare @d4 datetime

print '現在時刻をセット'
set @d=getdate()
print @d
print ''

print '10時間後を指定'
set @d2=dateadd(hour,10,@d)
print @d2
print ''

print '10日時間を指定'
set @d2=dateadd(hour,-10,@d)
print @d2
print ''

print '10日後を指定'
set @d2=dateadd(day,10,@d)
print @d2
print ''

print '10日前を指定'
set @d2=dateadd(day,-10,@d)
print @d2
print ''

print '簡易な計算方法----------'
print '10日後を指定'
set @d3=@d+10
print @d3
print ''

print '10日前を指定'
set @d3=@d-10
print @d3
print ''

print '簡易な計算方法で少数点を使うと----------'
print '0.001日後を指定'
set @d4=@d+0.001
print @d4
print @d4-@d
print convert(nvarchar(36), @d4-@d,21)
declare @dec decimal(11,6)
set @dec=3600*24/1000
print @dec/60

上の例の中に簡易な計算方法も載せておきました。
基本は日単位の計算なので単純な加算、減算なら+10とか-10で計算してくれます。
また、12時間とか6時間という切りの良い時間なら、0.5や0.25と言った指定でできます。

この辺りは好みもありますが、ちゃんとDATEADDを使った方が面倒にならない気もします。
以上、SQL SERVER 日付の加算、減算の開発備忘録でした。