SQLクリニック(2) Page 3/3

日付データ演算の達人技を伝授する
【第1話】

株式会社インサイトテクノロジー
山下正
2005/3/26

期間の取得

 さてさて、上記では特定の日を取得する方法を紹介しました。日付データに関する取り扱いとして、もう1つ押さえておきたいポイントがあります。それは期間です。

【月の差分(MONTHS_BETWEEN)】

 特定の日と日の間の“日数”を求める場合は、非常に簡単です。DATE型の引き算で求めることができますね。この場合、例えば下記のようなSQLで、「195日間」という結果を取得することができます。

SQL>  select   to_date('2005/02/14','yyyy/mm/dd')
  2          - to_date('2004/08/03','yyyy/mm/dd') duration
  3   from dual;

  DURATION
----------
       195

リスト10 特定の日と日の間の“日数”を求める

 これは簡単ですね。では、これを「6カ月と11日間」という表現にするにはどうしましょうか。こちらの表現の方が期間の長さを感覚的につかみやすい人が多いのではないでしょうか。

 こんな場合、MONTHS_BETWEEN関数が便利です。TRUNC関数や、ADD_MONTHS関数と組み合わせて表示してみます。

select  TRUNC(months_between( date2, date1 )) months
      , TRUNC(date2
              - ADD_MONTHS( date1, 
                       TRUNC(months_between( date2 ,date1 )))
            ) days
from dual

リスト11 関数を組み合わせた期間の計算

 date1とdate2に先ほどの日付をセットして実行してみましょう。次のような結果が得られます。

SQL> select  TRUNC(months_between( to_date('2005/02/14','yyyy/mm/dd')
  2                    , to_date('2004/08/03','yyyy/mm/dd') )) months
  3    , TRUNC(to_date('2005/02/14','yyyy/mm/dd')
  4      - ADD_MONTHS( to_date('2004/08/03','yyyy/mm/dd')
  5        , TRUNC(months_between( to_date('2005/02/14','yyyy/mm/dd')
  6                           ,to_date('2004/08/03','yyyy/mm/dd') )))
  7          ) days
  8  from dual;

    MONTHS       DAYS
---------- ----------
         6         11

リスト12 関数を組み合わせた期間の計算(実行例)

 MONTHS_BETWEEN関数は、単純に日付と日付の間に何カ月間あるかを数えてくれる関数です。なので演算結果に端数が出てしまい、そのまま表示させると「2.2345カ月間」のような分かりにくくなってしまいます。これも先に解説したTRUNC関数で丸めるなどして、要件に応じた数値に加工して表示させた方が親切ですね。

 今回は、いくつか日付データの演算を行ってみました。あまり使ったことのない関数もあったのではないでしょうか。次回は、日付に関するデータ型、Oracle9iから増えたTIMESTAMP型、期間データ型について解説する予定です。(次回に続く)


筆者プロフィール
株式会社インサイトテクノロジー
Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。山下 正は物腰の柔らかさで緊迫した状況を和やかにしつつも、鋭い視線で問題点を指摘するシステムコンサルタント。

  3/3  

 Index
連載 SQLクリニック(2)
日付データ演算の達人技を伝授する
【第1話】
  Page 1
・日付型データについて
・NLSパラメータを確認しておこう
・日付データの演算
  Page 2
・特定日の取得
Page 3
・期間の取得


SQLクリニック

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH