データ型¶
Virtual DataPort カタログには、事前定義されたデータ型のグループが含まれています。これらの型は、基本型と複合型の 2 つのグループに大別できます。
<Virtual DataPort data type> ::=
blob
| boolean
| date
| decimal
| double
| float
| int
| intervaldaysecond
| intervalyearmonth
| localdate
| long
| text
| time
| timestamp
| timestamptz
| xml
| <Virtual DataPort compound data type>
<Virtual DataPort compound data type> ::=
array
| register
サポートされている基本データ型は、以下のとおりです。
int
: 整数。最大値は +2^31-1 (2,147,483,647)、最小値は -2^31 (-2,147,483,648) です。long
: Long 型整数。最大値は 2 63 - 1 (9,223,372,036,854,775,807)、最小値は -2 63 (-9,223,372,036,854,775,808) です。float
: 単精度 32 ビット IEEE 754 浮動小数点数。値の範囲については、Java 言語仕様の「 浮動小数点型、フォーマット、および値 」を参照してください。double
: 倍精度 64 ビット IEEE 754 浮動小数点数。値の範囲については、Java 言語仕様の「 浮動小数点型、フォーマット、および値 」を参照してください。decimal
: 任意精度の符号付き 10 進数。boolean
: true、false、unknown (null) のいずれかをとる論理値。text
: 文字列。date
(非推奨): タイムゾーン変換されるタイムスタンプ。互換性のために維持されています。localdate
: タイムゾーンなしの日付 (年、月、日)。time
: タイムゾーンなしの時間 (時、分、秒、ミリ秒)。timestamp
: タイムゾーンなしのタイムスタンプ (年、月、日、時、分、秒、ミリ秒)。timestamptz
: タイムゾーン変換されるタイムスタンプ。intervaldaysecond
: YEAR または MONTH 以外の連続フィールドのうち、任意のセットを含む精度で表される継続期間。intervalyearmonth
: YEAR フィールドと MONTH フィールドの両方または一方を含む精度で表される継続期間。blob
: バイナリ値。この値をクエリ条件に加えることはできません。xml
: XML ドキュメントまたは XML フラグメント。
日時型
日時型については、次の「 日付、タイムスタンプ、間隔のデータ型 」で詳しく説明します。
複合型
Virtual DataPort では、SOAP Web サービスや XML ドキュメントなどから取得した階層データをモデル化するために複合データ型を定義することができます。複合型の定義方法については、「 データ型の定義 」で詳しく説明します。
複合データ型は以下のとおりです。
register
: 異種混合型の内部構造を備えた複合データ。つまり、データがさらに細かいフィールドに分かれたもので、その型はすべて異なります。array
: 同じregister
型のエレメントのリスト。
数値型
数値型 int
にはオーバーフロー保護はありません。そのため、2 つの int
値を伴う算術演算は、演算結果がデータ型の範囲を超える場合に誤った値を返します。このデータ型の範囲は -2,147,483,648 ~ 2,147,483,647 です。 int
値に対して算術演算を適用する際に、演算の結果がその範囲を超える可能性がある場合は、演算の入力値を long
または decimal
に変換することを検討してください。
たとえば、以下のクエリはかなり高い確率で無効な値を返します。
SELECT amount_in_millions * 1000000 AS amount
この問題を避けるために、列 amount_in_millions
を long
に変換します。
SELECT cast('long', amount_in_millions) * 1000000 AS amount
演算の入力値 (amount_in_millions
) にキャストを適用する必要がある点に注意してください。乗算の結果をキャストしても問題は解決されません。
型 decimal
は、任意精度であるため、この影響を受けません (つまり、精度に制限がありません)。
データ型 long
、 float
、 double
のいずれにもオーバーフロー保護はありません。ただし、その範囲ははるかに広いため、範囲を超えることは滅多にありません。