メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

型の互換性と変換

Amazon Redshift における型変換ルールおよびデータ型の互換性についての説明を以下に示します。

互換性

データ型のマッチング、リテラル値および定数のデータ型とのマッチングは、以下のようなさまざまなデータベース操作で発生します。

  • テーブルにおけるデータ操作言語 (DML) オペレーション

  • UNION、INTERSECT、および EXCEPT のクエリ

  • CASE 式

  • LIKE や IN など、述語の評価

  • データの比較または抽出を行う SQL 関数の評価

  • 算術演算子との比較

これらの操作の結果は、型変換ルールおよびデータ型の互換性に左右されます。互換性は、特定の値と特定のデータ型との 1 対 1 のマッチングが必ずしも必要でないことを暗示しています。一部のデータ型は互換性があるので、暗黙変換、または強制が可能です (詳細については、「暗黙的な変換型」を参照)。データ型に互換性がない場合は、明示変換関数を使用することにより、値をあるデータ型から別のデータ型に変換することが可能な場合があります。

互換性と変換に関する全般的なルール

次に示す互換性と変換に関するルールに注意してください。

  • 一般に、同じデータ型のカテゴリに属するデータ型 (各種の数値データ型) は互換性があり、暗黙的に変換することができます。

    たとえば、暗黙的な変換では、10 進値を整数列に変換できます。10 進値は整数に四捨五入されます。または、2008 のような数値を日付から抽出し、その値を整数列に挿入することができます。

  • 数値データ型では、範囲外の値を挿入しようとしたときに発生するオーバーフロー条件を適用します。例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数または 10 進値の整数部は決して切り捨てられません。しかし、10 進値の小数部は、適宜、切り上げまたは切り捨てることができます。

  • 各種のキャラクタ文字列型には互換性があります。シングルバイトデータを含む VARCHAR 列の文字列と CHAR 列の文字列は互換性があり、暗黙的に変換することができます。マルチバイトデータを含む VARCHAR 文字列には互換性がありません。また、キャラクタ文字列については、文字列が適切なリテラル値であれば、日付、タイムスタンプ、または数値に変換することができます。先頭のスペースまたは末尾のスペースはいずれも無視されます。逆に、日付、タイムスタンプ、または数値は、固定長または可変長の文字列に変換することができます。

    注記

    数値型にキャストするキャラクタ文字列には、数字の文字表現が含まれている必要があります。例えば、文字列 '1.0' または '5.9' を 10 進値にキャストすることはできますが、文字列 'ABC' はいずれの数値型にもキャストできません。

  • 数値とキャラクタ文字列を比較する場合、数値はキャラクタ文字列に変換されます。反対方向の変換 (キャラクタ文字列を数値に変換する) を実施するには、CAST および CONVERT などの明示的な関数を使用します。

  • 64 ビットの DECIMAL または NUMERIC の値を上位の精度に変換するには、CAST や CONVERT などの明示的な変換関数を使用する必要があります。

  • DATE または TIMESTAMP を TIMESTAMPTZ に変換する場合、DATE または TIMESTAMP は現在のセッションのタイムゾーンを使用していると見なされます。セッションのタイムゾーンは、デフォルト値の UTC です。セッションのタイムゾーンを設定する方法の詳細については、「timezone」を参照してください。

  • 同様に、TIMESTAMPTZ は、現在のセッションのタイムゾーンに基づいて DATE または TIMESTAMP に変換されます。セッションのタイムゾーンは、デフォルト値の UTC です。変換後、タイムゾーン情報は削除されます。

  • 指定されたタイムゾーンを含むタイムスタンプを表すキャラクタ文字列は、指定されたタイムゾーンを使用して TIMESTAMPTZ に変換されます。タイムゾーンが省略されている場合、現在のセッションのタイムゾーン (デフォルトでは UTC) が使用されます。

暗黙的な変換型

暗黙的な変換には、2 つのタイプがあります。

  • 割り当てにおける暗黙的な変換 (INSERT コマンドまたは UPDATE コマンドで値を設定するなど)

  • 式における暗黙的な変換 (WHERE 句で比較を実行するなど)

次の表に、割り当てまたは式において暗黙的に変換できるデータ型を一覧表示します。これらの変換は、明示的な変換関数を使用して実行することもできます。

変換元の型 変換先の型
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT、INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP

注記

TIMESTAMPTZ、TIMESTAMP、DATE、またはキャラクタ文字列間の暗黙的な変換では、現在のセッションのタイムゾーンが使用されます。現在のタイムゾーンの設定については、「timezone」を参照してください。