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关联。