添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PostgreSQL CAST 运算符简介

在很多情况下,您希望将一种 数据类型 的值转换为另一种数据类型。PostgreSQL 为您提供了允许您执行此操作的 CAST 运算符。

下面说明了类型转换 CAST 的语法:

CAST ( expression AS target_type );

在这个语法中:

  • 首先,指定一个表达式,可以是常量、表列、计算结果的表达式。
  • 然后,指定要将表达式结果值转换为的目标 数据类型
  • PostgreSQL 类型转换 :: 运算符

    除了类型转换 CAST 语法之外,您还可以使用以下语法将一种类型的值转换为另一种类型:

    expression::type
    

    请参见以下示例:

    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 评级将显示为零。为此,您可以使用带有类型CASTCASE表达式,如下面的查询所示:

    SELECT
    		WHEN rating~E'^\\d+$' THEN
    			CAST (rating AS INTEGER)
    		END as rating
    	ratings;
    

    CASE语句检查 rating 的值,如果与整数模式匹配,则将 rating 转换为整数,否则返回 0。

    在本教程中,您学习了如何使用 PostgreSQL 的CAST将一种类型的值转换为另一种类型。

    PostgreSQL 教程:数据类型

    PostgreSQL 文档:类型转换