2

我正在尝试使用 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 + 间隔“7”天
这显然更标准,但在 HSQLDB 中不起作用。

4

3 回答 3

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也支持表达式。

于 2010-12-16T20:17:35.283 回答
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 月 1 日和 8 日。

于 2009-12-21T20:01:56.007 回答
0

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

于 2009-12-19T17:59:02.193 回答