1. 程式人生 > 資料庫 >PostgreSQL CAST 轉換資料型別

PostgreSQL CAST 轉換資料型別

本文介紹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轉換資料型別,並通過幾個例項展示多種資料型別之間轉換。