« 逃避 | トップページ | Win32デバッグ(6)・・・動的コールグラフ(クラス設計) »

2009年8月 8日 (土)

間隔(インターバル)型

ちょっと、データベースのデータ型のお話。

SQL92では2つの日時の差つまり期間を表すデータ型として間隔(インターバル)型が定義されているが、これらは次の2つに分類される。

  • 年月間隔(year-month間隔)
  • 日時間隔(day-time間隔)

年月間隔とは2つの日時の差を年、月で表すデータ型で例えば、「123年4ヶ月」、「48ヶ月」は年月間隔である。同様に、日時間隔は2つの日時の差を日、時、分、秒で表すデータ型で、「235日」、「64時間23分12秒」などは日時間隔である。Oracleでは年月間隔の間隔型としてINTERVAL YEAR TO MONTH型、日時間隔の間隔型としてINTERVAL DAY TO SECOND型が用意されている。DB2には残念ながら間隔型は用意されていない。

と、これら間隔型を理解するのはそう難しくないと思うが、1点注意する事がある。それは、年月間隔に属する間隔型と日時間隔に属する間隔型には互換性がないのが基本?である。つまり、年月間隔に属する間隔型と日時間隔に属する間隔型を比較したり、相互に変換できないのである。一見すると

年月間隔の「123年4ヶ月」>日時間隔の「36ヶ月」

のように比較したり、

年月間隔の「1年」->日時間隔の「365日」

のように変換できそうだが、できないのである。

なぜできないのかは、少し考えてみれば分かるように、月によって日数(28,29,30,31日)が変わったり、平年とうるう年では日数が違うからである。つまり、年月間隔の「1ヶ月」といっても1月なら31日あるし、平年の2月なら29日あるし、日時間隔の日数に変換しようとしても決定できないのである。

と当たり前の事を書いてみる。

最後に実際にOracleで年月間隔と日時間隔の間隔を比較してみる。

Interval1_1

月によって日数が変わるといっても、年月間隔の「12年」と日時間隔の「36日」じゃどう転んでも、「12年」の方が長いのであるが、年月間隔と日時間隔は互換性がないのでエラーになるのである。

« 逃避 | トップページ | Win32デバッグ(6)・・・動的コールグラフ(クラス設計) »

DB2」カテゴリの記事

Oracle」カテゴリの記事

データベース」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651718

この記事へのトラックバック一覧です: 間隔(インターバル)型:

« 逃避 | トップページ | Win32デバッグ(6)・・・動的コールグラフ(クラス設計) »

自作ソフトウェア

無料ブログはココログ

メモ