需要支持 Oracle 和 DB2 的通用日期函数
Posted
技术标签:
【中文标题】需要支持 Oracle 和 DB2 的通用日期函数【英文标题】:Need common date function that support Oracle and DB2 【发布时间】:2019-10-11 20:35:17 【问题描述】:我正在使用在 DB2 中运行良好的日期函数。但是现在当我们切换到 Oracle 时,它失败了,因为 Oracle 中没有日期功能。现在我必须更改代码以支持这两个数据库。
这两个数据库中是否有日期函数支持?
coalesce(date(V_ORG_ID_EXPR_DT_FIELD), '12/31/9999')
【问题讨论】:
DATE 是 Oracle 中的一种数据类型。我想你会发现定义一个名为“DATE”的函数(或函数族)返回一个日期(数据类型)将非常困难,如果不是不可能的话。您最好定义一组用户定义的函数,它们在两个数据库中执行相同的功能,考虑到每个数据库在表示日期和时间方面的差异。 DB2 中的DATE
是严格意义上的日历日期(例如,YYYY-MM-DD)。 Oracle 中的DATE
是日历日期加上时间(例如,YYYY-MM-DD hh:mm:ss)。您是否在查询中考虑了这一点(例如,only use an exclusive upper-bound)?另请注意,MM/DD/YYYY
不是可移植格式,使用 ISO 格式 (YYYY-MM-DD) 会更好。你为什么要在两个数据库上运行完全相同的语句?还有许多其他差异,因此这不是唯一的问题。
【参考方案1】:
两个数据库恰好都有一个名为to_date()
的函数。两者都支持date
关键字来引入日期常量。以下内容应适用于两个数据库:
coalesce(to_date(V_ORG_ID_EXPR_DT_FIELD, '<your date format here>'), date '9999-12-31')
【讨论】:
我得到 ORA-00932:不一致的数据类型:预期 DATE 得到 CHAR 错误以上是关于需要支持 Oracle 和 DB2 的通用日期函数的主要内容,如果未能解决你的问题,请参考以下文章
全球首个支持事务一致性, 兼容DB2和Oracle的高速SQL on Hadoop引擎:Inceptor
2015最佳原创系列全球首个支持事务一致性, 兼容DB2和Oracle的高速SQL on Hadoop引擎:Inceptor