本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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)