データ・タイプ間のキャスト
所定のデータ・タイプを持つ値を、別のデータ・タイプに、あるいは異なる長さ、精度、位取りを持つ同じデータ・タイプにキャストする (変更する) 必要が生じる場合がしばしばあります。
データ・タイプのプロモーションで説明した データ・タイプ・プロモーションは、あるデータ・タイプの値を新しいデータ・タイプ にキャストする必要がある場合の例です。 別のデータ・タイプに変更できるデータ・タイプは、ソース・データ・タイプからターゲット・データ・タイプへとキャスト可能 です。
あるデータ・タイプから別のデータ・タイプへのキャストは、明示的にも、暗黙的にも起こり得ます。 キャスト関数または CAST 指定 (CAST の指定を参照) は、 データ・タイプを明示的に変更するために使用できます。 データベース・マネージャーは、特殊タイプを含む割り当ての際に、暗黙的にデータ・タイプをキャストします (特殊タイプの割り当てを参照してください)。 さらに、ソースに基づくユーザー定義関数を作成する場合、ソース関数のパラメーターのデータ・タイプは、作成する関数のデータ・タイプに対してキャスト可能である必要があります (CREATE FUNCTION (ソース派生)を参照してください)。
文字ストリングまたはグラフィック・ストリングを別のデータ・タイプにキャストする際に切り捨てが生じた場合は、非ブランクの文字が切り捨てられた場合には、警告が出されます。 この切り捨ての動作は、文字ストリングまたはグラフィック・ストリングの検索割り当ての場合と同様です (検索割り当て:を参照)。
バイナリー・ストリングを別のデータ・タイプにキャストするときに切り捨てが発生すると、警告が生成されます。この切り捨ての動作は、バイナリー・ストリングの取得割り当ての場合とよく似ています (検索割り当てを参照してください)。
配列タイプが関係するキャストでは、 ソースのデータ・タイプとターゲットのデータ・タイプの両方が同じ配列タイプでなければなりません。
キャストする先、あるいはキャストする元のいずれかデータ・タイプとして特殊タイプを含むキャストについて、表 1 はサポートされるキャストを示しています。表 2 は、組み込みデータ・タイプ間のキャストの場合に サポートされるキャストを示しています。
データ・タイプ ... | キャスト可能な相手先のデータ・タイプ ... |
---|---|
特殊タイプ DT | 特殊タイプ DT のソース・データ・タイプ |
特殊タイプ DT のソース・データ・タイプ | 特殊タイプ DT |
特殊タイプ DT | 特殊タイプ DT |
データ・タイプ A | 特殊タイプ DT (A が特殊タイプ DT のソース・データ・タイプにプロモーション可能な場合) (データ・タイプのプロモーションを参照) |
INTEGER | 特殊タイプ DT (DT のソース・タイプが SMALLINT の場合) |
DOUBLE | 特殊タイプ DT (DT のソース・データ・タイプが REAL の場合) |
VARCHAR | 特殊タイプ DT (DT のソース・データ・タイプが CHAR または GRAPHIC の場合) |
VARGRAPHIC | 特殊タイプ DT (DT のソース・データ・タイプが GRAPHIC または CHAR の場合) |
VARBINARY | 特殊タイプ DT (DT のソース・データ・タイプが BINARY の場合) |
文字ストリングとグラフィック・ストリングは、Unicode データの場合にのみ互換性があります。文字ビット・データとグラフィック・ストリングには、互換性がありません。
特殊タイプがキャストに関係している場合は、 特殊タイプの作成時に生成されたキャスト関数が使用されます。 データベース・マネージャーがどの関数を選択するかは、関数表記を使用するか、CAST 指定構文を使用するかによって異なります。 詳細については、関数解決および CAST の指定を参照してください。 関数解決は、両方の場合に使用されます。 ただし、CAST 指定の場合、ターゲット・データ・タイプとして非修飾の特殊タイプを指定すると、 データベース・マネージャーは、特殊タイプのスキーマ名を解決してから、 そのスキーマ名を使用してキャスト関数の位置を判別します。
次の表は、組み込みデータ・タイプ間でサポートされるキャストを示しています。
|
SMALLINT |
INTEGER |
BIGINT |
DECIMAL |
REAL |
DECFLOAT |
CHAR |
GRAPHIC |
BINARY |
DATE |
TIME |
TIMESTAMP |
ROWID |
DATALINK |
XML |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SMALLINT | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
INTEGER | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
BIGINT | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
DECIMAL | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
NUMERIC | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
REAL | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
DOUBLE | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
DECFLOAT | Y | Y | Y | Y | Y | Y | Y | Y1 | — | — | — | — | — | — | — |
CHAR | Y | Y | Y | Y | Y | Y | Y | Y1 | Y | Y | Y | Y | Y | — | — |
VARCHAR | Y | Y | Y | Y | Y | Y | Y | Y1 | Y | Y | Y | Y | Y | — | — |
CLOB | Y | Y | Y | Y | Y | Y | Y | Y1 | Y | Y | Y | Y | Y | — | — |
GRAPHIC | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y | Y | Y1 | Y1 | Y1 | — | — | — |
VARGRAPHIC | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y | Y | Y1 | Y1 | Y1 | — | — | — |
DBCLOB | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y1 | Y | Y | Y1 | Y1 | Y1 | — | — | — |
BINARY | — | — | — | — | — | — | Y | — | Y | — | — | — | — | — | — |
VARBINARY | — | — | — | — | — | — | Y | — | Y | — | — | — | — | — | — |
BLOB | — | — | — | — | — | — | Y | — | Y | — | — | — | — | — | — |
DATE | — | Y | Y | Y | — | — | Y | Y1 | — | Y | — | Y | — | — | — |
TIME | — | Y | Y | Y | — | — | Y | Y1 | — | — | Y | Y | — | — | — |
TIMESTAMP | — | — | Y | Y | — | — | Y | Y1 | — | Y | Y | Y | — | — | — |
ROWID | — | — | — | — | — | — | Y | — | Y | — | — | — | Y | — | — |
DATALINK | — | — | — | — | — | — | — | — | — | — | — | — | — | Y | — |
XML | — | — | — | — | — | — | — | — | — | — | — | — | — | — | Y |
注 :
1 変換は、ユニコード・グラフィックの場合にのみサポートされます。他方のデータ・タイプが FOR BIT DATA の場合は、変換できません。 |
次の表は、データ・タイプへのキャストの規則を示しています。
ターゲット・データ・タイプ | 規則 |
---|---|
SMALLINT | SMALLINTを参照してください。 |
INTEGER | INTEGER または INTを参照してください。 |
BIGINT | BIGINTを参照してください。 |
DECIMAL | DECIMAL または DECを参照してください。 |
NUMERIC | ZONEDを参照してください。 |
REAL | REALを参照してください。 |
DOUBLE | DOUBLE_PRECISION または DOUBLEを参照してください。 |
DECFLOAT | DECFLOATを参照してください。 |
CHAR | CHARを参照してください。 |
VARCHAR | VARCHARを参照してください。 |
CLOB | CLOBを参照してください。 |
GRAPHIC | ソース・データ・タイプが文字ストリングの場合は、 割り当ておよび比較にある変数に対するストリング割り当ての規則を参照してください。 その他の場合は、GRAPHICを参照してください。 |
VARGRAPHIC | ソース・データ・タイプが文字ストリングの場合は、 割り当ておよび比較にある変数に対するストリング割り当ての規則を参照してください。 その他の場合は、VARGRAPHICを参照してください。 |
DBCLOB | DBCLOBを参照してください。 |
BINARY | BINARYを参照してください。 |
VARBINARY | VARBINARYを参照してください。 |
BLOB | BLOBを参照してください。 |
DATE | DATEを参照してください。 |
TIME | TIMEを参照してください。 |
TIMESTAMP | TIMESTAMP で、2 番目の 引数としてターゲット・データ・タイプの精度を使用する場合を参照してください。 ソース・データ・タイプが DATE の場合は、 指定の日付と 00:00:00 という時刻でタイム・スタンプが構成されます。 ソース・データ・タイプが TIME の場合は、 CURRENT_DATE と指定の時刻でタイム・スタンプが構成されます。 |
DATALINK | 割り当ておよび比較にあるデータ・リンク割り当ての規則を参照してください。 |
ROWID | ROWIDを参照してください。 |
XML | 割り当ておよび比較にある XML 割り当ての規則を参照してください。 |