Oracle vs PostgreSQL,研发注意事项(7)- 类型转换
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,本节以数值型相互转换以及数值型和字符型的转换为例大体介绍了Oracle和PostgreSQL类型转换上的部分异同,可据此思路推广到其他类型。一、数值类型转换下面以数值类型为例子说明,包括运算结果的转换
千家信息网最后更新 2025年02月07日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安全错误
数据库的锁怎样保障安全
王俊网络安全手抄报
数据库full什么意思
云服务器管理控制台在哪里
广东分析软件开发商
内蒙古水性软件开发怎么样
奉贤区无线网络技术代理品牌
关于网络安全的创意图片
数据库一次读取多张图片
济南专用设备管理软件开发
网安大队网络安全工作计划
软件开发人员派遣有哪些
服务器 gcp
海陵区环保网络技术市场
谁主管谁负责网络安全法
濮阳县智慧城市网络安全招标
青少年关于网络安全知识问答
数字天堂网络技术公司
网络安全招标为什么
频域oct图像数据库
网络安全应注意哪一点
银河麒麟怎么打开服务器命令窗
随遇直播服务器异常
如何使用数据库插入数据
合肥欣景网络技术
济南专用设备管理软件开发
八美图软件开发
服务器加装存储
李沧区手机软件开发哪家便宜
应急局网络安全要点
天津回收浪潮服务器内存条