需要支持 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递归函数

DB2支持Oracle递归函数

DB2支持Oracle递归函数

全球首个支持事务一致性, 兼容DB2和Oracle的高速SQL on Hadoop引擎:Inceptor

2015最佳原创系列全球首个支持事务一致性, 兼容DB2和Oracle的高速SQL on Hadoop引擎:Inceptor

MySQL中datetime和timestamp的区别