CAST 函數 - AWS Clean Rooms

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

CAST 函數

CAST 函數會將一種資料類型轉換為另一個相容的資料類型。例如,您可以將字串轉換為日期,或將數值類型轉換為字串。CAST 會執行執行期轉換,這表示轉換不會變更來源資料表中值的資料類型。它僅在查詢的上下文中進行更改。

CAST 函數非常類似 CONVERT 函數,因為它們都將一種資料類型轉換為另一種資料類型,但它們的呼叫方式不同。

某些資料類型需要使用 CAST 或 CONVERT 函數來明確轉換為其他資料類型。其他資料類型可在另一個命令中隱含地轉換,而不需要使用 CAST 或 CONVERT。請參閱類型相容性與轉換

語法

使用兩種同等的語法格式中的任何一種,將運算式從一種資料類型轉換為另一種資料類型。

CAST ( expression AS type ) expression :: type

引數

運算式

任何評估為一或多個值的表達式,例如欄名或常值。轉換 Null 值會傳回 Null。運算式不能包含空白或空白字串。

type

支援的其中一個資料類型,除了 VARBYTE、二進位和二進位變異資料類型。

傳回類型

CAST 傳回 type 引數指定的資料類型。

注意

AWS Clean Rooms 如果您嘗試執行有問題的轉換,例如失去精確度的 DECIMAL 轉換,就會傳回錯誤,如下所示:

select 123.456::decimal(2,1);

或造成溢位的 INTEGER 轉換:

select 12345678::smallint;

範例

下列兩個查詢相同。都是將小數值轉換為整數:

select cast(pricepaid as integer) from sales where salesid=100; pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100; pricepaid ----------- 162 (1 row)

以下產生類似的結果。它不需要執行範例資料:

select cast(162.00 as integer) as pricepaid; pricepaid ----------- 162 (1 row)

在此範例中,時間戳記資料欄中的值會轉換為日期,因此會從每個結果中移除時間:

select cast(saletime as date), salesid from sales order by salesid limit 10; saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)

如果您沒有按照上一個範例中所示使用 CAST,則結果將包括時間:2008-02-18 02:36:48

下列查詢會將可變字元資料轉換為日期。它不需要執行範例資料。

select cast('2008-02-18 02:36:48' as date) as mysaletime; mysaletime -------------------- 2008-02-18 (1 row)

在此範例中,日期欄中的值轉換為時間戳記:

select cast(caldate as timestamp), dateid from date order by dateid limit 10; caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)

在與上一個示例類似的情況下,您可以通過使用來獲得對輸出格式的其他控制TO_CHAR

在此範例中,整數轉換為字元字串:

select cast(2008 as char(4)); bpchar -------- 2008

在此範例中,DECIMAL(6,3) 值轉換為 DECIMAL(4,1) 值:

select cast(109.652 as decimal(4,1)); numeric --------- 109.7

此範例顯示更複雜的運算式。SALES 資料表中的 PRICEPAID 欄 (DECIMAL(8,2) 欄) 轉換為 DECIMAL(38,2) 欄,並將值乘以 100000000000000000000:

select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid; salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)