PostgreSQL数据类型转换主要有三种方式:通过格式化函数、CAST函数、::操作符,下面分别介绍。

通过格式化函数进行转换

PostgreSQL提供一系列函数用于数据类型转换,如表所示。

通过CAST函数进行转换将varchar字符类型转换成text类型,如下所示:

        mydb=> SELECT CAST(varchar'123' as text);
            text
        ------
            123
        (1 row)

将varchar字符类型转换成int4类型,如下所示:

        mydb=> SELECT CAST(varchar'123' as int4);
            int4
        ------
            123

通过::操作符进行转换

以下例子转换成int4或numeric类型,如下所示:

        mydb=> SELECT 1::int4, 3/2::numeric;
          int4 |      ? column?
        ------+--------------------
            1 | 1.5000000000000000
        (1 row)

另一个例子,通过SQL查询给定表的字段名称,先根据表名在系统表pg_class找到表的OID,其中OID为隐藏的系统字段:

        mydb=> SELECT oid, relname FROM pg_class WHERE relname='test_json1';
              oid  |  relname
        ----------+------------
            16509 | test_json1
        (1 row)

之后根据test_json1表的OID,在系统表pg_attribute中根据attrelid(即表的OID)找到表的字段,如下所示:

        mydb=> SELECT attname FROM pg_attribute WHERE attrelid='16509' AND attnum >0;
            attname
        ---------
            id
            name
        (2 rows)

上述操作需通过两步完成,但通过类型转换可一步到位,如下所示:

        mydb=> SELECT attname
                FROM pg_attribute
                WHERE attrelid='test_json1'::regclass AND attnum >0;
            attname
        ---------
            id
            name
        (2 rows)

这节介绍了三种数据类型转换方法,第一种方法兼容性相对较好,第三种方法用法简捷。

提示

pg_class系统表存储PostgreSQL对象信息,比如表、索引、序列、视图等,OID是隐藏字段,唯一标识pg_class中的一行,可以理解成pg_class系统表的对象ID;pg_attribute系统表存储表的字段信息,数据库表的每一个字段在这个视图中都有相应一条记录,pg_attribute.attrelid是指字段所属表的OID,正好和pgclass.oid关联。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐