翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
型の互換性と変換
以下のトピックでは、 での型変換ルールとデータ型の互換性について説明します AWS Clean Rooms SQL。
互換性
データ型のマッチング、リテラル値および定数のデータ型とのマッチングは、以下のようなさまざまなデータベース操作で発生します。
-
テーブルのデータ操作言語 (DML) オペレーション
-
UNION、INTERSECT、および EXCEPTクエリ
-
CASE 式
-
LIKE や IN などの述語の評価
-
データの比較または抽出を行うSQL関数の評価
-
算術演算子との比較
これらの操作の結果は、型変換ルールおよびデータ型の互換性に左右されます。互換性とは、 one-to-one特定の値と特定のデータ型の一致が必ずしも必要ではないことを意味します。一部のデータ型は互換性があるため、暗黙変換、または強制が可能です。詳細については、「暗黙的な変換型」を参照してください。データ型に互換性がない場合は、明示変換関数を使用することにより、値をあるデータ型から別のデータ型に変換することが可能な場合があります。
互換性と変換に関する全般的なルール
次に示す互換性と変換に関するルールに注意してください。
-
一般に、同じデータ型のカテゴリに属するデータ型 (各種の数値データ型) は互換性があり、暗黙的に変換することができます。
例えば、暗黙的な変換では、10 進値を整数列に変換できます。10 進値は整数に四捨五入されます。または、
2008
のような数値を日付から抽出し、その値を整数列に挿入することができます。 -
数値データ型は、値を挿入 out-of-rangeしようとしたときに発生するオーバーフロー条件を適用します。例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数や 10 進数の全体が切り捨てられることはありませんが、10 進値の小数部分は、適宜、四捨五入される場合があります。ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。
-
さまざまなタイプの文字列に互換性があります。単一バイトのデータを含むCHAR列文字列とVARCHAR、列文字列は同等で暗黙的に変換可能です。マルチバイトデータを含むVARCHAR文字列は同等ではありません。また、キャラクタ文字列については、文字列が適切なリテラル値であれば、日付、時間、タイムスタンプ、または数値に変換できます。先頭と末尾のスペースはすべて無視されます。逆に、日付、時間、タイムスタンプ、または数値は、固定長または可変長の文字列に変換することができます。
注記
数値型にキャストするキャラクタ文字列には、数字の文字表現が含まれている必要があります。例えば、文字列
'1.0'
または'5.9'
を 10 進値にキャストすることはできますが、文字列'ABC'
はいずれの数値型にもキャストできません。 -
DECIMAL 値を文字列と比較すると、 AWS Clean Rooms は文字列をDECIMAL値に変換しようとします。他のすべての数値と文字列を比較する場合、数値は文字列に変換されます。反対方向の変換 (文字列を整数に変換する、DECIMAL値を文字列に変換するなど) を適用するには、 などの明示的な関数を使用しますCAST 関数。
-
64 ビットの DECIMALまたは NUMERIC値をより高い精度に変換するには、 CASTまたは 関数などの明示的な変換CONVERT関数を使用する必要があります。
-
DATE または TIMESTAMPを に変換する場合TIMESTAMPTZ、または TIMEを に変換する場合TIMETZ、タイムゾーンは現在のセッションタイムゾーンに設定されます。デフォルトでは、セッションのタイムゾーンは ですUTC。
-
同様に、 TIMESTAMPTZは現在のセッションタイムゾーンTIMESTAMPに基づいて DATE、TIME、または に変換されます。デフォルトでは、セッションのタイムゾーンは ですUTC。変換後、タイムゾーン情報は削除されます。
-
タイムゾーンが指定されたタイムスタンプを表す文字列は、UTCデフォルトで現在のセッションタイムゾーンTIMESTAMPTZを使用して に変換されます。同様に、タイムゾーンが指定された時刻を表す文字列は、UTCデフォルトで現在のセッションタイムゾーンTIMETZを使用して に変換されます。
暗黙的な変換型
暗黙的な変換には、2 つのタイプがあります。
-
INSERT または UPDATE コマンドでの値の設定など、割り当ての暗黙的な変換
-
WHERE 句で比較を実行するなど、式の暗黙的な変換
次の表に、割り当てまたは式において暗黙的に変換できるデータ型を一覧表示します。これらの変換は、明示的な変換関数を使用して実行することもできます。
変換元の型 | 変換先の型 |
---|---|
BIGINT | BOOLEAN |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER | |
REAL (FLOAT4) | |
SMALLINT 、、または SHORT | |
VARCHAR | |
CHAR | VARCHAR |
DATE | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT 、、または LONG |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER INT) | |
REAL (FLOAT4) | |
SMALLINT 、、または SHORT | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT 、、または LONG |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT) | |
REAL (FLOAT4) | |
SMALLINT 、、または SHORT | |
VARCHAR | |
INTEGER (INT) | BIGINT 、、または LONG |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT 、、または SHORT | |
VARCHAR | |
REAL (FLOAT4) | BIGINT 、、または LONG |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT) | |
SMALLINT 、、または SHORT | |
VARCHAR | |
SMALLINT | BIGINT 、、または LONG |
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 関数」を参照してください。