データ・タイプ間のキャスト

所定のデータ・タイプを持つ値を、別のデータ・タイプに、あるいは異なる長さ、精度、位取りを持つ同じデータ・タイプにキャストする (変更する) 必要が生じる場合がしばしばあります。

データ・タイプのプロモーションで説明した データ・タイプ・プロモーションは、あるデータ・タイプの値を新しいデータ・タイプ にキャストする必要がある場合の例です。 別のデータ・タイプに変更できるデータ・タイプは、ソース・データ・タイプからターゲット・データ・タイプへとキャスト可能 です。

あるデータ・タイプから別のデータ・タイプへのキャストは、明示的にも、暗黙的にも起こり得ます。 キャスト関数または CAST 指定 (CAST の指定を参照) は、 データ・タイプを明示的に変更するために使用できます。 データベース・マネージャーは、特殊タイプを含む割り当ての際に、暗黙的にデータ・タイプをキャストします (特殊タイプの割り当てを参照してください)。 さらに、ソースに基づくユーザー定義関数を作成する場合、ソース関数のパラメーターのデータ・タイプは、作成する関数のデータ・タイプに対してキャスト可能である必要があります (CREATE FUNCTION (ソース派生)を参照してください)。

文字ストリングまたはグラフィック・ストリングを別のデータ・タイプにキャストする際に切り捨てが生じた場合は、非ブランクの文字が切り捨てられた場合には、警告が出されます。 この切り捨ての動作は、文字ストリングまたはグラフィック・ストリングの検索割り当ての場合と同様です (検索割り当て:を参照)。

バイナリー・ストリングを別のデータ・タイプにキャストするときに切り捨てが発生すると、警告が生成されます。この切り捨ての動作は、バイナリー・ストリングの取得割り当ての場合とよく似ています (検索割り当てを参照してください)。

配列タイプが関係するキャストでは、 ソースのデータ・タイプとターゲットのデータ・タイプの両方が同じ配列タイプでなければなりません。

キャストする先、あるいはキャストする元のいずれかデータ・タイプとして特殊タイプを含むキャストについて、表 1 はサポートされるキャストを示しています。表 2 は、組み込みデータ・タイプ間のキャストの場合に サポートされるキャストを示しています。

表 1. 特殊タイプが含まれる場合のサポートされるキャスト
データ・タイプ ... キャスト可能な相手先のデータ・タイプ ...
特殊タイプ 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 指定の場合、ターゲット・データ・タイプとして非修飾の特殊タイプを指定すると、 データベース・マネージャーは、特殊タイプのスキーマ名を解決してから、 そのスキーマ名を使用してキャスト関数の位置を判別します。

次の表は、組み込みデータ・タイプ間でサポートされるキャストを示しています。

表 2. 組み込みデータ・タイプ間でサポートされるキャスト

 
 
 
ターゲット・
データ・
タイプ →
 
 
 
ソース・
データ・タイプ ↓

  SMALLINT

INTEGER

BIGINT

  DECIMAL
  NUMERIC

  REAL
  DOUBLE

  DECFLOAT

  CHAR
  VARCHAR
  CLOB

  GRAPHIC
  VARGRAPHIC
  DBCLOB

  BINARY
  VARBINARY
  BLOB

  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 の場合は、変換できません。

 

次の表は、データ・タイプへのキャストの規則を示しています。

表 3. データ・タイプへのキャストの規則
ターゲット・データ・タイプ 規則
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 割り当ての規則を参照してください。