

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

# 型の互換性と変換
<a name="s_Type_conversion"></a>

以下のトピックでは、 AWS Clean Rooms Spark SQL での型変換ルールとデータ型互換性の仕組みについて説明します。

**Topics**
+ [互換性](#s_Type_conversion-compatibility)
+ [互換性と変換に関する全般的なルール](#Type_conversion-general-compatibility-and-conversion-rules)
+ [暗黙的な変換型](#implicit-conversion-types-spark)

## 互換性
<a name="s_Type_conversion-compatibility"></a>

 データ型のマッチング、リテラル値および定数のデータ型とのマッチングは、以下のようなさまざまなデータベース操作で発生します。
+ テーブルにおけるデータ操作言語 (DML) オペレーション 
+ UNION、INTERSECT、および EXCEPT のクエリ 
+ CASE 式 
+ LIKE や IN など、述語の評価 
+ データの比較または抽出を行う SQL 関数の評価 
+ 算術演算子との比較 

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

## 互換性と変換に関する全般的なルール
<a name="Type_conversion-general-compatibility-and-conversion-rules"></a>

次に示す互換性と変換に関するルールに注意してください。
+ 一般に、同じデータ型のカテゴリに属するデータ型 (各種の数値データ型) は互換性があり、暗黙的に変換することができます。

  例えば、暗黙的な変換では、10 進値を整数列に変換できます。10 進値は整数に四捨五入されます。または、`2008` のような数値を日付から抽出し、その値を整数列に挿入することができます。
+ 数値データ型では、範囲外の値を挿入しようとしたときに発生するオーバーフロー条件を適用します。例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数や 10 進数の全体が切り捨てられることはありませんが、10 進値の小数部分は、適宜、四捨五入される場合があります。ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。
+ 各種キャラクタ文字列型には互換性があります。シングルバイトデータを含む VARCHAR 列の文字列と CHAR 列の文字列は互換性があり、暗黙的に変換することができます。マルチバイトデータを含む VARCHAR 文字列には互換性がありません。また、キャラクタ文字列については、文字列が適切なリテラル値であれば、日付、時間、タイムスタンプ、または数値に変換できます。先頭と末尾のスペースはすべて無視されます。逆に、日付、時間、タイムスタンプ、または数値は、固定長または可変長の文字列に変換することができます。
**注記**  
数値型にキャストするキャラクタ文字列には、数字の文字表現が含まれている必要があります。例えば、文字列 `'1.0'` または `'5.9'` を 10 進値にキャストすることはできますが、文字列 `'ABC'` はいずれの数値型にもキャストできません。
+ DECIMAL 値を文字列と比較すると、 AWS Clean Rooms は文字列を DECIMAL 値に変換しようとします。他のすべての数値と文字列を比較する場合、数値は文字列に変換されます。反対方向の変換 (文字列を整数に変換する、DECIMAL 値を文字列に変換するなど) を実行するには、[CAST 関数](CAST_function.md) などの明示的な関数を使用します。
+ 64 ビットの DECIMAL または NUMERIC の値を上位の精度に変換するには、CAST や CONVERT などの明示的な変換関数を使用する必要があります。

## 暗黙的な変換型
<a name="implicit-conversion-types-spark"></a>

暗黙的な変換には、2 つのタイプがあります。
+ 割り当てにおける暗黙的な変換 (INSERT コマンドまたは UPDATE コマンドで値を設定するなど)
+ 式における暗黙的な変換 (WHERE 句で比較を実行するなど)

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/clean-rooms/latest/sql-reference/s_Type_conversion.html)

**注記**  
DATE、TIME、TIMESTAMP\$1LTZ、TIMESTAMP\$1NTZ、または文字列間の暗黙的な変換では、現在のセッションタイムゾーンが使用されます。  
VARBYTE データ型は、暗黙的に他のデータ型に変換できません。詳細については、「[CAST 関数](CAST_function.md)」を参照してください。