[英]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.