さて、1/24方式でDATE型のデータの「日」と「時分秒」を計算できることは前回に解説したとおりです。しかし、月の計算は1/24方式では対応できずADD_MONTHS関数を使いました。
実は期間データ型の場合も、年月演算用の関数や演算子が別途用意されています。これを使用することで、先ほどと同様に可読性の高い記述が可能になります。
では期間データ型を利用して、現在時刻から1年6カ月後の日付を取得してみましょう。
SQL> SELECT SYSDATE, SYSDATE + TO_YMINTERVAL('1-6') TARGET_DATE FROM dual; SYSDATE TARGET_DATE ------------------- ------------------- 2005/04/08 02:47:29 2006/10/08 02:47:29
SQL> SELECT SYSDATE, SYSDATE + INTERVAL '1-6' YEAR TO MONTH TARGET_DATE FROM dual; SYSDATE TARGET_DATE ------------------- ------------------- 2005/04/08 02:48:39 2006/10/08 02:48:39
もちろん年月と日付時刻の合わせ技も可能です。
SQL> SELECT SYSDATE, SYSDATE + INTERVAL '1-6' YEAR TO MONTH + INTERVAL '10' DAY TARGET_DATE FROM dual; SYSDATE TARGET_DATE ------------------- ------------------- 2005/04/08 02:50:15 2006/10/18 02:50:15
可読性が高いということは、デバッグの効率化という点についてもメリットがあります。ぜひ試していただきたいテクニックです。
SQLを書き始めて間もないプログラマの皆さんは、日付データに関する演算について少しは整理できたでしょうか。また、日付データの演算なんて簡単・簡単と思われていた皆さん、期間データ型を使った演算は理解されましたか。
日付データの演算についてはここまでです。関数の使い方については、詳細な説明がオラクル社のマニュアルに記載されていますので、この記事の内容を理解された方は、再度マニュアルを確認してみてください。
さて次回は、Oracle9iから導入されたタイムゾーンについて解説する予定です。(次回に続く)
Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。大道隆久は緊迫したトラブル現場でも常に冷静沈着であり、スマートに解決へと導いていくシステムコンサルタント。
Copyright © ITmedia, Inc. All Rights Reserved.