類型相容性與轉換 - AWS Clean Rooms

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

類型相容性與轉換

下列主題說明類型轉換規則和資料類型相容性的運作方式 AWS Clean Rooms SQL。

相容性

在資料庫各種操作的作業期間,會進行資料類型的比對,以及字面值與常數和資料類型的比對,包括下列的操作:

  • 資料表上的資料處理語言 (DML) 操作

  • UNION、 INTERSECT和 EXCEPT查詢

  • CASE 表達式

  • 評估述詞,例如 LIKE和 IN

  • 執行資料比較或擷取的SQL函數評估

  • 數學運算子的比較

這些操作的結果,取決於類型轉換規則和資料類型的相容性。相容性表示 one-to-one不一定需要符合特定值和特定資料類型。由於某些資料類型相容,因此可能會進行隱含轉換或強制。如需詳細資訊,請參閱隱含轉換類型。當資料類型不相容時,有時您可以使用明確的轉換函式,來將值從一種資料類型轉換為另一種。

一般相容性與轉換規則

請注意下列的相容性與轉換規則:

  • 一般而言,屬於相同類型類別的資料類型 (例如不同的數值資料類型),彼此可以相容和隱含轉換。

    例如,進行隱含轉換時,您可以將小數值插入整數資料欄。小數會經過四捨五入而變成整數。或者,您可以從日期中擷取 2008 等數值,然後將該數值插入整數資料欄。

  • 數值資料類型會強制執行嘗試插入 out-of-range值時發生的溢位條件。例如,精確度為 5 的小數值,不符合精確度定義為 4 的小數資料欄。整數或小數的整個部分永遠不會截斷。不過,可以視需要四捨五入小數的分數部分。不過,從資料表所選取值的明確轉換結果,不會四捨五入。

  • 不同類型的字元字串相容。包含單位元組資料的資料VARCHAR欄字串和資料CHAR欄字串相當且隱含可轉換。包含多位元組資料的VARCHAR字串不相當。此外,如果字串是適當的常值,您可以將字元字串轉換為日期、時間、時間戳記或數值。會忽略任何前後空格。相反地,您也可以將日期、時間、時間戳記或數值,轉換為固定長度或可變長度的字元字串。

    注意

    您想要轉換為數值類型的字元字串,必須包含表示數字的字元。例如,您可以將字串 '1.0''5.9' 轉換為十進位值,但無法將字串轉換為'ABC'任何數值類型。

  • 如果您將DECIMAL值與字元字串進行比較, 會 AWS Clean Rooms 嘗試將字元字串轉換為DECIMAL值。比較所有其他數值和字元字串時,數值會轉換為字元字串。若要強制執行相反的轉換 (例如,將字元字串轉換為整數,或將DECIMAL值轉換為字元字串),請使用明確函數,例如 CAST 函數

  • 若要將 64 位元DECIMAL或NUMERIC值轉換為更高的精確度,您必須使用明確的轉換函數,例如 CAST或 CONVERT函數。

  • 將 DATE或 轉換為 TIMESTAMP TIMESTAMPTZ,或TIME將 轉換為 時TIMETZ,時區會設定為目前的工作階段時區。工作階段時區預設為 UTC 。

  • 同樣地, TIMESTAMPTZ 會根據目前的工作階段時區轉換為 DATETIME、 或 TIMESTAMP 。工作階段時區預設為 UTC 。在轉換之後,會去掉時區的資訊。

  • 代表指定時區時間戳記的字元字串會使用TIMESTAMPTZ目前工作階段時區轉換為 ,這是預設UTC的。同樣地,代表指定時區時間的字元字串會使用TIMETZ目前工作階段時區轉換為 ,這是預設UTC的。

隱含轉換類型

隱含轉換有兩種:

  • 指派中的隱含轉換,例如在 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、、TIMETZ、 DATE TIME或 字元字串之間的隱含轉換會使用目前的工作階段時區。

VARBYTE 資料類型無法隱含轉換為任何其他資料類型。如需詳細資訊,請參閱CAST 函數