

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 類型相容性與轉換
<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 函式，進行評估 
+ 數學運算子的比較 

這些操作的結果，取決於類型轉換規則和資料類型的相容性。*相容性*暗示並不一定需要針對某些值和某些資料類型，進行一對一的比對。由於某些資料類型*相容*，因此可能會有隱含轉換或*強制*。如需詳細資訊，請參閱[隱含轉換類型](#implicit-conversion-types-spark)。當資料類型不相容時，有時您可以使用明確的轉換函式，來將值從一種資料類型轉換為另一種。

## 一般相容性與轉換規則
<a name="Type_conversion-general-compatibility-and-conversion-rules"></a>

請注意下列的相容性與轉換規則：
+ 一般而言，屬於相同類型類別的資料類型 (例如不同的數值資料類型)，彼此可以相容和隱含轉換。

  例如，進行隱含轉換時，您可以將小數值插入整數資料欄。小數會經過四捨五入而變成整數。或者，您可以從日期中擷取 `2008` 等數值，然後將該數值插入整數資料欄。
+ 當您試圖插入超出範圍的值時，數值資料類型會強制讓溢位狀況發生。例如，精確度為 5 的小數值，不符合精確度定義為 4 的小數資料欄。整數或小數的整個部分永遠不會截斷。不過，適當時，小數的分數部分可以四捨五入或捨去。不過，從資料表所選取值的明確轉換結果，不會四捨五入。
+ 不同類型的字元字串相容。包含單位元組資料和 CHAR 資料欄字串的 VARCHAR 資料欄字串相當且隱含可轉換。包含多位元組資料的 VARCHAR 字串並不相容。此外，如果字串是適當的常值，您可以將字元字串轉換為日期、時間、時間戳記或數值。會忽略任何開頭或結尾的空格。相反地，您也可以將日期、時間、時間戳記或數值，轉換為固定長度或可變長度的字元字串。
**注意**  
您想要轉換為數值類型的字元字串，必須包含表示數字的字元。例如，您可以將字串 `'1.0'`或 `'5.9'` 轉換為十進位值，但無法將字串轉換為`'ABC'`任何數值類型。
+ 如果您比較 DECIMAL 值與字元字串， 會 AWS Clean Rooms 嘗試將字元字串轉換為 DECIMAL 值。比較所有其他數值和字元字串時，數值會轉換為字元字串。若要強制執行相反的轉換 (例如，將字元字串轉換為整數，或將 DECIMAL 值轉換為字元字串)，請使用明確函數，例如 [CAST 函數](CAST_function.md)。
+ 若要將 64 位元的 DECIMAL 或 NUMERIC 值轉換為較高的精確度，您必須使用明確轉換函式，例如 CAST 或 CONVERT 函式。

## 隱含轉換類型
<a name="implicit-conversion-types-spark"></a>

隱含轉換有兩種：
+ 指派中的隱含轉換，例如在 INSERT 或 UPDATE 命令中設定值
+ 表達式中的隱含轉換，例如在 WHERE 子句中執行比較

下表列出可在指派或表達式中隱含轉換的資料類型。您也可以使用明確轉換函式來進行這些轉換。

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

**注意**  
DATE、TIME、TIMESTAMP\$1LTZ、TIMESTAMP\$1NTZ 或字元字串之間的隱含轉換會使用目前的工作階段時區。  
VARBYTE 資料類型無法隱含轉換至任何其他資料類型。如需詳細資訊，請參閱[CAST 函數](CAST_function.md)。