日付の足し引き
普段、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した方がいいと思います。