型の互換性と変換 - AWS Clean Rooms

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

型の互換性と変換

ここでは、 AWS Clean Roomsにおける型変換ルールおよびデータ型の互換性について説明します。

互換性

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

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

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

  • CASE 式

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

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

  • 算術演算子との比較

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

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

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

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

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

  • 数値データ型では、値を挿入しようとしたときに発生するオーバーフロー状態が発生します。 out-of-range 例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数や 10 進数の全体が切り捨てられることはありませんが、10 進値の小数部分は、適宜、四捨五入される場合があります。ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。

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

    注記

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

  • DECIMAL 値を文字列と比較すると、文字列を DECIMAL AWS Clean Rooms 値に変換しようとします。他のすべての数値と文字列を比較する場合、数値は文字列に変換されます。反対方向の変換 (文字列を整数に変換する、DECIMAL 値を文字列に変換するなど) を実行するには、CAST 関数 などの明示的な関数を使用します。

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

  • DATE または TIMESTAMP を TIMESTAMPTZ に変換する場合、または TIME を TIMETZ に変換する場合、タイムゾーンは現在のセッションのタイムゾーンに設定されます。セッションのタイムゾーンは、デフォルト値の UTC です。

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

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

暗黙的な変換型

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

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

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

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

変換元の型 変換先の型
BIGINT BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER
REAL (FLOAT4)
SMALLINT
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
INTEGER (INT) BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT
VARCHAR
REAL (FLOAT4) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
SMALLINT
VARCHAR
SMALLINT BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
TIMETZ VARCHAR
TIME
注記

TIMESTAMPTZ、TIMESTAMP、DATE、TIME、TIMETZ、またはキャラクタ文字列間の暗黙的な変換では、現在のセッションのタイムゾーンが使用されます。

VARBYTE データ型は、暗黙的に他のデータ型に変換できません。詳細については、「CAST 関数」を参照してください。