Oracle vs PostgreSQL,研发注意事项(7)- 类型转换
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本节以数值型相互转换以及数值型和字符型的转换为例大体介绍了Oracle和PostgreSQL类型转换上的部分异同,可据此思路推广到其他类型。一、数值类型转换下面以数值类型为例子说明,包括运算结果的转换
千家信息网最后更新 2024年09月22日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安全错误
数据库的锁怎样保障安全
我的世界怎样恢复服务器
已有服务器在运行
移动网络安全策略
数据库前端收银系统视频
振动软件开发公司
IPHOTO下载软件开发
服务器升级改不了
类书数据库
电脑服务器显卡接口
网络安全宣化宣传
东营戴尔服务器代理客服电话
防寒的服务器
服务器内存条有什么优点
利用wifi传输数据库
注册一个网络技术公司
软件开发团队合作
软件开发语言什么意思
软件开发需求估算方法
中国工业企业数据库是只包含工业
海康视频服务器怎么重置
北京软件开发公司排名彭军舰
温州电信服务器
网络安全包含哪四个方面
网络安全国际博览会开幕式
中国石油大学数据库考试龚安
ps5 天命2 服务器
虚拟机如何建立dns服务器
平台软件开发成本
用类方法创建数据库
日常网络安全吗