千家信息网

Oracle vs PostgreSQL,研发注意事项(7)- 类型转换

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本节以数值型相互转换以及数值型和字符型的转换为例大体介绍了Oracle和PostgreSQL类型转换上的部分异同,可据此思路推广到其他类型。一、数值类型转换下面以数值类型为例子说明,包括运算结果的转换
千家信息网最后更新 2026年11月03日Oracle vs PostgreSQL,研发注意事项(7)- 类型转换

本节以数值型相互转换以及数值型和字符型的转换为例大体介绍了Oracle和PostgreSQL类型转换上的部分异同,可据此思路推广到其他类型。

一、数值类型转换

下面以数值类型为例子说明,包括运算结果的转换和强制类型转换.
运算结果
以除运算为例说明.
PostgreSQL的除运算

testdb=# select 1/4; ?column? ----------        0(1 row)

Oracle的除运算

TEST-orcl@server4>select 1/4 from dual;       1/4----------       .25

两个整型值1和4参与除法运算,结果PostgreSQL为整型的0,Oracle为浮点型的0.25,两者的行为不一致.
为何PostgreSQL执行整型运算返回的结果是整型?当然,这是PG的机制(整型/整型=整型)使然,在PG中,运算的结果类型可查询pg_operator获得:

testdb=# \xExpanded display is on.testdb=# select * from pg_operator where oprname = '/' and oprleft=21 and oprright = 21;-[ RECORD 1 ]+--------oprname      | / -->运算符oprnamespace | 11oprowner     | 10oprkind      | boprcanmerge  | foprcanhash   | foprleft      | 21 -->int2(占用2个字节的整型,通过select * from pg_type where oid=21查询可得)oprright     | 21 -->同上oprresult    | 21 -->整型/整型,结果也是整型oprcom       | 0oprnegate    | 0oprcode      | int2divoprrest      | -oprjoin      | -

在PostgreSQL中,要想获得0.25的结果,需要进行转换:

testdb=# select 1/4::float; ?column? ----------     0.25(1 row)

二、强制类型转换

以字符型->整型为例说明.
PostgreSQL

testdb=# drop table if exists t_cast ;DROP TABLEtestdb=# create table t_cast (c_int int,c_s varchar(20));CREATE TABLEtestdb=# insert into t_cast values(1,'1');INSERT 0 1testdb=# insert into t_cast values(2,'2');INSERT 0 1testdb=# select * from t_cast where c_int = 1; c_int | c_s -------+-----     1 | 1(1 row)testdb=# select * from t_cast where c_s = 1;ERROR:  operator does not exist: character varying = integer -->可变长字符型转换为整型LINE 1: select * from t_cast where c_s = 1;                                       ^HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

Oracle

TEST-orcl@server4>drop table t_cast;Table dropped.TEST-orcl@server4>create table t_cast (c_int int,c_s varchar2(20)) tablespace users;Table created.TEST-orcl@server4>insert into t_cast values(1,'1');1 row created.TEST-orcl@server4>insert into t_cast values(2,'2');1 row created.TEST-orcl@server4>select * from t_cast where c_int = 1;     C_INT C_S---------- --------------------         1 1TEST-orcl@server4>select * from t_cast where c_s = 1;     C_INT C_S---------- --------------------         1 1

PG,整型不能转换为字符型,而Oracle可以.
PG可以通过显式类型转换或者自定义类型转换的机制实现字符型->整型的转换:

-- 显式转换testdb=# select * from t_cast where c_s = 1::varchar; c_int | c_s -------+-----     1 | 1(1 row)-- 自定义类型转换testdb=# create cast(varchar as integer) with inout as implicit;CREATE CASTtestdb=# select * from t_cast where c_s = 1; c_int | c_s -------+-----     1 | 1(1 row)

通过数据字典表pg_cast可查询PG支持的类型转换.

testdb=# select oid,a.* from pg_cast a where castsource=1043 and casttarget = 23;  oid  | castsource | casttarget | castfunc | castcontext | castmethod -------+------------+------------+----------+-------------+------------ 16774 |       1043 |         23 |        0 | i           | i --> 这是新加的记录

三、参考资料

CREATE CAST
PostgreSQL 自定义自动类型转换(CAST)

类型 运算 结果 字符型 字符 数值 查询 机制 这是 强制 一致 两个 例子 参考资料 可以通过 字典 字节 异同 思路 据此 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安纸贵互联网科技有限公司 鸠鸠互联网科技 互联网科技未来 中资互联网科技 互联网医疗科技 宜安科技 互联网金融 互联网科技logo设计 重庆科技学院互联网 互联网科技素材视频竖屏 互联网巨头投资的硬核科技 老年人脱离互联网科技的作文 哈尔滨新华互联网科技学院 阿里巴巴算科技企业还是互联网 央行互联网金融科技公司 黑科技闪耀互联网之光 搜狐科技互联网 链环科技传统企业怎么转型互联网 允成互联网科技有限公司融资 全球科技与互联网公司市值变化 张家口科技产业互联网平台 科技服务与互联网 鑫亿盛互联网科技 温州喔噻互联网科技有限公司 阿里巴巴算科技企业还是互联网 小米互联网科技园设置 移动互联网年度科技创新 消费医药和互联网科技 民营互联网公司国防科技 东风日产互联网科技公司叫什么 互联网科技快速发展优美句子
0