Преобразование арифметики даты Oracle для работы в HSQLDB - PullRequest
2 голосов
/ 19 декабря 2009

Я пытаюсь провести выборочное тестирование базы данных, поддерживаемой Oracle, с помощью hsqldb и dbunit, но наткнулся на загадку.

Проблема в следующем EJB-QL (немного упрощенном):

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

Кажется, это работает только в версии Oracle для Oracle.

Какой самый простой способ конвертировать это для работы в hsqldb и oracle? Предположим, что изменение двух аргументов на именованные параметры является очень сложным рефакторингом, поэтому я предпочту ответы, которые предоставляют более стандартизированный аналог

o.startdate + 7

EDIT: После дополнительных исследований, похоже, Oracle преобразует приведенный выше фрагмент в

o.startdate + INTERVAL '7' DAY
, который, по-видимому, является более стандартным, но не работает в HSQLDB.

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

HSQLDB 2.0 (выпущен в 2010 году) поддерживает синтаксис.

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

Это также поддерживает

o.startdate + INTERVAL '7' DAY

Обновление:

В режиме совместимости ORA, введенном после HSQLDB 2.2, также поддерживается выражение o.startDate + 7.

1 голос
/ 21 декабря 2009

Ваша методология кажется правильной. Я не знаю, с чем у тебя проблемы. Это работает в 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;

В обеих средах я получаю результаты, показывающие первое и восьмое января.

0 голосов
/ 19 декабря 2009

Синтаксис HSQLDB для манипулирования датами сильно отличается от Oracle. Ваш лучший шанс - написать хранимую процедуру в Oracle DB, которая имитирует поведение функций / процедур HSQLDB.

...