Функция TO_DATE не найдена в базе данных H2

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

SQL:

SELECT ACCT_RULE_ID, ACCT_ACTION_ID 
  FROM ACCT_RULE 
 WHERE (ACCT_ACTION_ID = ?) 
   AND (START_DATETIME <= to_char(?, 'mm/dd/yyyy HH:MI:SS AM')) 
   AND (STOP_DATETIME > to_char(?, 'mm/dd/yyyy HH:MI:SS AM')) 

Замена первого параметра на Id, а второго и третьего параметров на новое значение Date().

Exception:
Caused by: org.h2.jdbc.JdbcSQLException: Function "TO_DATE" not found; SQL statement:

person user3268428    schedule 04.02.2014    source источник
comment
Я использую java.util.Date()   -  person user3268428    schedule 04.02.2014


Ответы (4)


Один из способов удалить часть времени из поля даты и времени в H2 — отформатировать поле как строку и затем проанализировать его. Это сработало для меня.

PARSEDATETIME(FORMATDATETIME(field_name, 'гггг-ММ-дд'), 'гггг-ММ-дд')

Функции анализа и форматирования даты H2 следуют семантике java.text.SimpleDataFormat.

Да, это НЕ супероптимизация. Это нормально для наших нужд, поскольку мы используем H2 только для модульных тестов.

person David Small    schedule 25.03.2016

вы должны быть в состоянии создать свою собственную функцию to_date

drop ALIAS if exists TO_DATE; 
CREATE ALIAS TO_DATE as '
import java.text.*;
@CODE
java.util.Date toDate(String s, String dateFormat) throws Exception { 
  return new SimpleDateFormat(dateFormat).parse(s); 
} 
' 

Конечно, вы также можете просто использовать parsedatetime() за ответ Дэвида Смолла.

person EoinS    schedule 19.12.2018

В базе данных H2 нет функции TO_CHAR(). Но в базе данных H2 есть sysdate, dual, varchar2, что упрощает написание запроса оракула, который будет выполняться в базе данных H2. Таким образом, вы можете вместо этого написать функцию, которая будет псевдонимом функции базы данных H2, чтобы заставить ее обрабатывать дату/временную метку с форматом. TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS') можно использовать в базе данных H2.

person TKV    schedule 04.02.2014
comment
Я полагаю, что Тиджо предлагал вам использовать определяемую пользователем функцию. Подробнее здесь: stackoverflow.com/a/10903425/443633. Что работает. Спасибо Тиджо! - person michaelok; 21.12.2015

H2 еще не поддерживает функцию to_date.

Это элемент приоритета 2 в дорожной карте.

http://www.h2database.com/html/roadmap.html

person Szabo Zoltan    schedule 28.10.2015