PostgreSQL CAST 轉換資料型別
阿新 • • 發佈:2020-12-20
本文介紹PostgreSQL CAST操作轉換資料型別。
1. PostgreSQL CAST介紹
很多時候需要轉換資料型別。PostgreSQL 提供了CAST操作實現型別轉換。語法如下:
CAST ( expression AS target_type );
- 表示式可以是常量、列、表示式
- 目標資料型別即想轉換的資料型別
*cast :: operator
除了上面的語法,還有另外的語法實現同樣功能;expression::type
,舉例:
SELECT
'100'::INTEGER,
'01-OCT-2015'::DATE;
注意使用cast操作(::)是PostgreSQLT特有功能,非SQL的通用標準。下面通過一些示例展示如何實現型別轉換。
2. 示例
2.1 string 轉 integer
SELECT CAST ('100' AS INTEGER);
如果表示式不能轉成目標型別,會丟擲異常,請看示例:
SELECT
CAST ('10C' AS INTEGER);
[Err] ERROR: invalid input syntax for integer: "10C"
LINE 2: CAST ('10C' AS INTEGER);
2.2 string 轉 date
SELECT
CAST ('2015-01-01' AS DATE),
CAST ('01-OCT-2015' AS DATE);
首先轉換 2015-01-01 字串至 2015-01-01; 然後轉換 01-OCT-2015 至 2015-10-01.
2.3 string 轉 double
SELECT CAST ('10.2' AS DOUBLE);
哎,怎麼報錯了:
[Err] ERROR: type "double" does not exist
LINE 2: CAST ('10.2' AS DOUBLE)
我們使用DOUBLE PRECISION 代替DOUBLE:
SELECT
CAST ('10.2' AS DOUBLE PRECISION);
2.4 string 轉 boolean
ELECT CAST('true' AS BOOLEAN), CAST('false' as BOOLEAN), CAST('T' as BOOLEAN), CAST('F' as BOOLEAN);
輸出如下:
true false true false
2.5 string 轉 timestamp
SELECT '2019-06-15 14:30:20'::timestamp;
輸出:
2019-06-15 14:30:20
2.6 string 轉 interval
SELECT '15 minute'::interval,
'2 hour'::interval,
'1 day'::interval,
'2 week'::interval,
'3 month'::interval;
輸出:
"00:15:00" "02:00:00" "1 day" "14 days" "3 mons"
2.7 使用cast轉表字段資料
首先傳教ratings表,包括兩個列:id, rating;rating的資料型別是varchar(1):
CREATE TABLE ratings (
ID serial PRIMARY KEY,
rating VARCHAR (1) NOT NULL
);
下面插入一些示例資料:
INSERT INTO ratings (rating)
VALUES
('A'),
('B'),
('C');
因為需求變化,需要使用ratings儲存數值,如:1,2,3代替A,B,C:
INSERT INTO ratings (rating)
VALUES
(1),
(2),
(3);
查詢資料:
select * from ratings ;
輸出:
1 "A"
2 "B"
3 "C"
4 "1"
5 "2"
6 "3"
現在我們需要轉換rating列所有值為數值,A,B,C轉為0,下面使用case表示式結合cast操作實現查詢:
SELECT
id,
CASE
WHEN rating~E'^\\d+$' THEN
CAST (rating AS INTEGER)
ELSE
0
END as rating
FROM
ratings;
輸出:
1 0
2 0
3 0
4 1
5 2
6 3
case檢查rating,如果匹配整數模式,則轉換為整數,否則返回0.
3. 總結
本文學習瞭如何使用PostgreSQL CAST轉換資料型別,並通過幾個例項展示多種資料型別之間轉換。