繁体   English   中英

转换Oracle日期算术以在HSQLDB中工作

[英]Converting Oracle date arithmetic to work in HSQLDB

我正在尝试使用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中不起作用。

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

您的方法似乎正确。 我不知道你有什么麻烦。 使用以下脚本可在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;

在两种环境下,我得到的结果均显示一月的第一天和第八天。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM