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 日付の加算、減算の開発備忘録でした。