日付の足し引き
普段、SQL Server 2000を主に使っているので、DB2でもdateaddみたいな関数でやるのかなぁとSQL本で調べていたら。
「それ、足す1デイでできますよ」と同僚からのお言葉。
DB2で
ほんとかそれと思ってやってみたら、出来た。
select current timestamp as current, current timestamp + 1 year as 年, current timestamp + 1 month as 月, current timestamp + 1 day as 日, current timestamp + 1 hour as 時, current timestamp + 1 minutes as 分, current timestamp + 1 second as 秒, current timestamp + 1 year + 1 month + 1 day + 1 hour + 1 minutes + 1 second as 年月日時分秒 from sysibm.sysdummy1
今 | 年 | 月 | 日 | 時 | 分 | 秒 | 年月日時分秒 |
2007-05-28 17:00:38.337768 | 2008-05-28 17:00:38.337768 | 2007-06-28 17:00:38.337768 | 2007-05-29 17:00:38.337768 | 2007-05-28 18:00:38.337768 | 2007-05-28 17:01:38.337768 | 2007-05-28 17:00:39.337768 | 2008-06-29 18:01:39.337768 |
少なからずショック。できるのか。そんなことが。
IBMさんのサイトにも載ってた。。
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/daytime.html
SQL Server 2000で
ものは試しと、SQL Serverでやってみた。
ら、SQLエラー。
select current_timestamp as 今, current_timestamp + 1 year as 年, current_timestamp + 1 month as 月, current_timestamp + 1 day as 日, current_timestamp + 1 hour as 時, current_timestamp + 1 minutes as 分, current_timestamp + 1 second as 秒
↑これはエラー(キーワード 'as' 付近に正しくない構文があります。)
さらにものは試しと、asを取ってみた。
select current_timestamp as 今, current_timestamp + 1 year , current_timestamp + 1 month , current_timestamp + 1 day , current_timestamp + 1 hour , current_timestamp + 1 minutes , current_timestamp + 1 second
今度はエラーが出なかったものの、全部「日」だけ1日加算。
どうやら、yearとかmonthとかは無視で、+1だけ有効になっているっぽい。
じゃぁ、その1って何だということで、
select current_timestamp as 今, current_timestamp + 1 as [1] , current_timestamp + 0.1 as [0.1] , current_timestamp + 0.01 as [0.01] , current_timestamp + 0.001 as [0.001]
とやってみたら予想外の結果。
今 | [1] | [0.1] | [0.01] | [0.001] |
2007-05-28 17:23:20.183 | 2007-05-29 17:23:20.183 | 2007-05-28 19:47:20.183 | 2007-05-28 17:37:44.183 | 2007-05-28 17:24:46.583 |
日が基準なのかぁーと予想されたので、24で割れば時間を加減できるかなと
select current_timestamp as 今, current_timestamp + 1 as [1], current_timestamp + 1.0/24 as [1.0/24], current_timestamp + 2.0/24 as [2.0/24], current_timestamp + 3.0/24 as [3.0/24], current_timestamp + 4.0/24 as [4.0/24]
とやってみたら、だいたい予想通りの結果。
今 | 1 | 1.0/24 | 2.0/24 | 3.0/24 | 4.0/24 |
2007-05-28 17:36:46.110 | 2007-05-29 17:36:46.110 | 2007-05-28 18:36:46.050 | 2007-05-28 19:36:46.080 | 2007-05-28 20:36:46.110 | 2007-05-28 21:36:46.050 |
※割る方か割られる方を小数ありにしておかないと、計算結果0になって加減されないです。
すっきり。
※正確じゃないので、SQL Server だったらdateaddした方がいいと思います。