我正在尝试使用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中不起作用。
答案 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函数/过程的行为。