2013-12-17 5 views
0

Мы используем HSQLDB для JUnits, наша производственная база данных - Oracle.HSQLDB просто значение времени вставки

У меня есть таблица, в которой есть поле (тип timestamp в Oracle), который содержит информацию о каком-то важном времени в день.

Я хотел подготовить тестовые данные для JUnit в скрипте, но мне не удалось.

Основная идея, которую я могу сделать в Oracle DB является

SYSDATE - TRUNC(SYSDATE) 

, когда я попробовал то же самое с CURRENT_TIME в HSQLDB я получил сообщение об ошибке:

org.hsqldb.HsqlException: incompatible data type in conversion 

следующая идея, которую я получил, чтобы добавить время в "пустой датой", попробовал:

DATE '0000-01-01' 

но получил

org.hsqldb.HsqlException: data exception: invalid datetime format 

странно для DATE '2013-01-01' он отлично работает, может быть, initialia нули проблема ... нет, они не являются одинаковыми для DATE '0-01-01' ...

На этом этапе я был вид ума уже (думаю, что я может сделать в Oracle через секунду, и я провел здесь несколько часов).

От documentation Я попытался найти комбинацию функций, которые создают требуемый результат, но, к сожалению, я обнаружил, что документация не ясна. Кажется, так что для первого чтения, но когда попробовал я был удивлен, почему это

DATEADD('hour', 1, CURRENT_DATE) 

работает отлично, в то время как

DATEADD('hour', 1, CURRENT_TIME) 

заканчивается

org.hsqldb.HsqlException: incompatible data type in conversion 

, как напротив, DATE_ADD работает как и тип параметра для обеих функций одинаковый в документации: -/

Я считаю, что могу сделать, somethi ng like

// 4x call of DATEADD, datetime not working as described above 
date - years - months - days + seconds_from_midnight 

но должно быть что-то простое в использовании (надеюсь, так).

HSQLDB версия: 2.3.1

ответ

2

Используйте эту установку для испытаний:

SET DATABASE SQL SYNTAX ORA TRUE 

Тогда это работает и возвращает ИНТЕРВАЛ

SYSDATE - TRUNC(SYSDATE) 

Чем проще форма CAST (SYSDATE AS TIME) вернуть временную часть SYSDATE, которую вы можете преобразовать в интервал.

Эта дата DATE '0000-01-01' не принимается, так как нет ГОДА 0.Вы должны использовать DATE '0001-01-01'

Это прекрасно работает для преобразования времени суток в ИНТЕРВАЛ:

LOCALTIME - TIME'00:00:00' 

Примечание МестноеВремя не имеет временной зоны, в то время как CURRENT_TIME имеет.

+0

Хорошо, синтаксис установки ORA является хорошим обходным решением в этом случае. Около года 0 меня смутила Java, здесь доступно установить год на 0. – Betlista

Смежные вопросы