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

时间:2009-12-19 00:34:08

标签: java sql oracle hsqldb ejbql

我正在尝试使用hsqldb和dbunit对Oracle支持的数据库进行测试,但我遇到了麻烦。

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

SELECT o 
FROM Offer o 
WHERE :nowTime 
  BETWEEN o.startDate AND o.startDate + 7

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

在hsqldb和oracle中将此转换为最简单的方法是什么?假设在命名参数的参数之间改变两个是一个非常困难的重构,所以我将支持提供更标准化的模拟的答案

o.startdate + 7


编辑: 在做了一些更多的研究后,看起来Oracle将上面的代码段转换为

o.startdate + INTERVAL '7' DAY
,这显然更标准,但在HSQLDB中不起作用。

3 个答案:

答案 0 :(得分:4)

HSQLDB 2.0(2010年发布)支持语法。

SELECT o 
FROM Offer o 
WHERE nowTime 
  BETWEEN o.startDate AND o.startDate + 7 DAY

它也支持

o.startdate + INTERVAL '7' DAY

更新

自HSQLDB 2.2以来引入的ORA兼容模式,也支持表达式o.startDate + 7

答案 1 :(得分:1)

您的方法似乎是正确的。我不知道你遇到了什么麻烦。这在Oracle和HSQLDB中使用以下脚本:

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月的第一天和第八天。

答案 2 :(得分:0)

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