Java 将Oracle日期算法转换为在HSQLDB中工作

Java 将Oracle日期算法转换为在HSQLDB中工作,java,sql,oracle,hsqldb,ejbql,Java,Sql,Oracle,Hsqldb,Ejbql,我试图使用hsqldb和dbunit对Oracle支持的数据库进行现场测试,但遇到了一个障碍 问题在于以下EJB-QL(简化了一点): 这似乎只适用于Oracle版本的SQL 对于我来说,将其转换为在hsqldb和oracle中工作的最简单方法是什么?假设将两个参数之间的参数更改为命名参数是一个非常困难的重构,因此我倾向于使用能够提供更标准化的o.startdate+7模拟的答案 o.startdate + 7 编辑: 经过进一步研究,Oracle似乎将上述代码段转换为o.startdate+

我试图使用hsqldb和dbunit对Oracle支持的数据库进行现场测试,但遇到了一个障碍

问题在于以下EJB-QL(简化了一点):

这似乎只适用于Oracle版本的SQL

对于我来说,将其转换为在hsqldb和oracle中工作的最简单方法是什么?假设将两个参数之间的参数更改为命名参数是一个非常困难的重构,因此我倾向于使用能够提供更标准化的o.startdate+7模拟的答案

o.startdate + 7
编辑:
经过进一步研究,Oracle似乎将上述代码段转换为o.startdate+INTERVAL'7'DAY,这显然更为标准,但在HSQLDB中不起作用

用于日期操作的HSQLDB语法与Oracle有很大不同。您最好的机会是在Oracle DB中编写一个模拟HSQLDB函数/过程行为的存储过程。

您的方法似乎是正确的。我不知道你有什么问题。这在Oracle和HSQLDB中使用以下脚本:

o.startdate + INTERVAL '7' DAY
CREATE TABLE OFFER (ID INTEGER, STARTDATE DATE);
INSERT INTO OFFER (ID, STARTDATE) VALUES (1, DATE '2009-01-01');
SELECT ID, STARTDATE, STARTDATE + INTERVAL '7' DAY FROM OFFER;
在这两种环境中,我都会得到显示1月1日和8日的结果。

hsqldb2.0(2010年发布)支持这种语法

SELECT o 
FROM Offer o 
WHERE nowTime 
  BETWEEN o.startDate AND o.startDate + 7 DAY
它还支持

o.startdate + INTERVAL '7' DAY
更新:


在HSQLDB2.2引入的ORA兼容模式中,还支持表达式
o.startDate+7

我正在使用内存中的HSQLDB测试Oracle SQL,以进行快速集成测试。仅仅为了让我的测试工作而修改Oracle DB似乎是一个非常糟糕的主意。
o.startdate + INTERVAL '7' DAY