Oracle与HGDB用日期给文本类型赋值时的差异

本文探讨了在Oracle和HGDB中日期赋值给文本类型时存在的格式差异问题,指出由于类型转换规则不同导致的问题。文章提供了解决方案,通过创建自定义函数和隐式转换,确保日期格式在Oracle兼容的'dd-MM-yy'格式下进行转换,从而解决数据一致性问题。

目录
环境
症状
问题原因
解决方案

环境
系统平台:Microsoft Windows (64-bit) 10
版本:5.6.5
症状
在工作中Oracle与HGDB用日期给文本类型赋值时存在差异,

Oracle中日期给文本类型赋值时格式是:dd-MM-yy ;

HGDB中日期给文本类型赋值时格式是:yyyy-MM-dd HH24:MI:SS.US’。

问题原因
由于赋值前后类型不一致,会发生隐式的类型转换,调用cast函数,但是Oracle和HGDB针对该类型转换结果不一样,

例如:

select cast( sysdate as varchar(99) ) from dual ; --> 11-12月 -20

select cast( now()::timestamp as varchar(99)) ; --> 2020-12-11 11:14:01.057804

解决方案
通过 to_char($1,‘dd-FMMM月 -yy’)可以将格式转为Oracle中格式,写入隐式转换中,可以实现自动转换。隐式转换如下:

create or replace function timestampwotz_to_varchar(timestamp without time zone) returns varchar as $$

select to_char($1,‘dd-FMMM月 -yy’);

$$ language sql strict;

create cast (timestamp without time zone as varchar) with function timestampwotz_to_varchar(timestamp without time zone) as implicit ;

create or replace function timestampwtz_to_varchar(timestamp with time zone) returns varchar as $$

select to_char($1,‘dd-FMMM月 -yy’);

$$ language sql strict;

create cast (timestamp with time zone as varchar) with function timestampwtz_to_varchar(timestamp with time zone) as implicit ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值