PostgreSQL CAST 运算符简介
在很多情况下,您希望将一种
数据类型
的值转换为另一种数据类型。PostgreSQL 为您提供了允许您执行此操作的
CAST
运算符。
下面说明了类型转换
CAST
的语法:
CAST ( expression AS target_type );
在这个语法中:
首先,指定一个表达式,可以是常量、表列、计算结果的表达式。
然后,指定要将表达式结果值转换为的目标
数据类型
。
PostgreSQL 类型转换 :: 运算符
除了类型转换
CAST
语法之外,您还可以使用以下语法将一种类型的值转换为另一种类型:
请参见以下示例:
SELECT
'100'::INTEGER,
'01-OCT-2015'::DATE;
请注意,带有强制转换运算符 (::) 的类型转换语法是 PostgreSQL 特定的,并不符合 SQL 标准。
PostgreSQL
CAST
示例
让我们看一些使用
CAST
运算符将一种类型的值转换为另一种类型的示例。
1) 将字符串转换为整数的示例
以下语句将字符串常量转换为整数:
SELECT
CAST ('100' AS INTEGER);
如果表达式无法转换为目标类型,PostgreSQL 将引发错误。请参见以下示例:
SELECT
CAST ('10C' AS INTEGER);
ERROR: invalid input syntax for integer: "10C"
LINE 2: CAST ('10C' AS INTEGER);
2) 将字符串转换为日期的示例
此示例使用CAST
将字符串转换为日期:
SELECT
CAST ('2015-01-01' AS DATE),
CAST ('01-OCT-2015' AS DATE);
首先,我们将2015-01-01
文字字符串转换为January 1st 2015
。其次,我们将01-OCT-2015
转换为October 1st 2015
。
3) 将字符串转换为双精度浮点数的示例
在下面的示例中,我们尝试将字符串'10.2'
转换为双精度浮点数值:
SELECT
CAST ('10.2' AS DOUBLE);
哎呀,我们收到以下错误消息:
ERROR: type "double" does not exist
LINE 2: CAST ('10.2' AS DOUBLE)
要解决此问题,您需要使用DOUBLE PRECISION
而不是DOUBLE
,如下所示:
SELECT
CAST ('10.2' AS DOUBLE PRECISION);
4) 将字符串转换为布尔值的示例
此示例使用CAST()
将字符串 ’true’、‘T’ 转换为 true,将 ‘false’、‘F’ 转换为 false:
SELECT
CAST('true' AS BOOLEAN),
CAST('false' as BOOLEAN),
CAST('T' as BOOLEAN),
CAST('F' as BOOLEAN);
这是输出:
5) 将字符串转换为时间戳的示例
此示例使用强制转换运算符 (::) 将字符串转换为时间戳:
SELECT '2019-06-15 14:30:20'::timestamp;
6) 将字符串转换为时间间隔示例
此示例使用强制转换运算符将字符串转换为时间间隔:
SELECT '15 minute'::interval,
'2 hour'::interval,
'1 day'::interval,
'2 week'::interval,
'3 month'::interval;
这是输出:
7) 对表数据使用CAST
的示例
首先,创建一个由两列组成的ratings
表:id 和 rating。rating
列的数据类型是VARCHAR(1)
:
CREATE TABLE ratings (
ID serial PRIMARY KEY,
rating VARCHAR (1) NOT NULL
其次,插入一些示例数据到ratings
表中。
INSERT INTO ratings (rating)
VALUES
('A'),
('B'),
('C');
由于需求发生变化,我们使用相同的ratings
表将评级存储为数字,例如 1、2、3,而不是 A、B 和 C:
INSERT INTO ratings (rating)
VALUES
(1),
(2),
(3);
因此该ratings
表存储包括数字和字符串的混合类型值。
SELECT
ratings;
现在,我们必须将rating
列中的所有值转换为整数,所有其他 A、B、C 评级将显示为零。为此,您可以使用带有类型CAST
的CASE
表达式,如下面的查询所示:
SELECT
WHEN rating~E'^\\d+$' THEN
CAST (rating AS INTEGER)
END as rating
ratings;
CASE
语句检查 rating 的值,如果与整数模式匹配,则将 rating 转换为整数,否则返回 0。
在本教程中,您学习了如何使用 PostgreSQL 的CAST
将一种类型的值转换为另一种类型。
PostgreSQL 教程:数据类型
PostgreSQL 文档:类型转换