CAST函數 - Amazon Redshift

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

CAST函數

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

該CAST功能與非常相似CONVERT函數,因為它們都將一種數據類型轉換為另一種數據類型,但它們的調用方式不同。

某些資料類型需要使用CAST或CONVERT函數明確轉換為其他資料類型。其他數據類型可以隱式轉換,作為另一個命令的一部分,而無需使用CAST或CONVERT。請參閱 類型相容性與轉換

語法

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

CAST ( expression AS type ) expression :: type

引數

運算式

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

type

其中一個支援的資料類型

傳回類型

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

注意

如果您嘗試執行有問題的轉換 (例如失去精確度的轉換),Amazon Redshift 會傳回錯誤,如下所示:DECIMAL

select 123.456::decimal(2,1);

或導致溢出的INTEGER轉換:

select 12345678::smallint;

範例

部分範例使用範例TICKIT資料庫。如需有關設定範例資料的詳細資訊,請參閱載入資料

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

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

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

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)
注意

您無法對GEOMETRY資料類型執行CAST或CONVERT作業,將其變更為其他資料類型。不過,您可以以延伸的已知 binary (EWKB) 格式提供字串常值的十六進位表示法,做為接受引數之函GEOMETRY數的輸入。例如,以下 ST_AsText 函數預期 GEOMETRY 資料類型。

SELECT ST_AsText('01010000000000000000001C400000000000002040');
st_astext ------------ POINT(7 8)

您也可以明確指定 GEOMETRY 資料類型。

SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
st_astext ------------ POINT(5 6)