Oracle vs PostgreSQL,研发注意事项(7)- 类型转换
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本节以数值型相互转换以及数值型和字符型的转换为例大体介绍了Oracle和PostgreSQL类型转换上的部分异同,可据此思路推广到其他类型。一、数值类型转换下面以数值类型为例子说明,包括运算结果的转换
千家信息网最后更新 2025年11月09日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 1PG,整型不能转换为字符型,而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安全错误
数据库的锁怎样保障安全
宝塔数据库装不上
局域网服务器需要网线吗
我的世界网易有哪些自救服务器
idea数据库不显示数据
信息中心网络安全应急预案
php的数据库导入还原
服务器双网不通硬件咋排查
听写软件开发
服务器可以远程连接
镇海一站式软件开发外包
数据库中浏览browse功能
最强二次元网络技术
博山配货站开票软件开发
国外网络安全法律教育
日本服务器测速
媒体发布新闻需不需要用服务器
软件开发培训学几年
工业互联网科技新基建
运营商和软件开发怎么分
数据库报表样式为原点
改数据库 导入
统计网络安全条例
华科国家网络安全新校区
计算机网络技术专业属于二建
维护网络安全的工作内容
hp服务器 红灯
数据库应用技术教材屈武江
软件开发转型做什么工作好
连云港雷战网络技术
北京联通网络安全员