str_to_date mysql не работает в hsql

Мой код выполняет следующее обновление в данный момент времени в моей базе данных mysql:

" UPDATE client_registration "  +
" SET registration_date = NOW() "  +
" WHERE cycle <= str_to_date(\"" + now + "\",'%d/%m/%Y %H:%i') "; 

Однако у меня есть модульный тест, который пытается выполнить это обновление в базе данных HSQL, и я получаю следующее сообщение об ошибке: user lacks privilege or object not found: STR_TO_DATE.

Какой-то способ выполнить условие WHERE cycle_start <= str_to_date(\"" + now + "\",'%d/%m/%Y %H:%i') для базы данных mysql и базы данных hsql?


person Gabriel Santos    schedule 21.07.2020    source источник
comment
поэтому вы пытаетесь выполнить тот же запрос, что и MySQL и HSQL?   -  person Asmoun    schedule 21.07.2020
comment
Что такое переменная now в вашем коде Java? Какой это тип?   -  person fredt    schedule 21.07.2020
comment
Mysql — мой банк по умолчанию, а hsql я использую в качестве банка памяти для выполнения своих тестов.   -  person Gabriel Santos    schedule 22.07.2020
comment
теперь дата преобразуется в строку с использованием SimpleDateFormat   -  person Gabriel Santos    schedule 22.07.2020


Ответы (2)


Вы должны переписать свой запрос для HSQL:

" UPDATE client_registration "  +
" SET registration_date = NOW() "  +
" WHERE cycle <= current_timestamp"; 

Как выбрать current_timestamp в hsqldb?

person Lars Skaug    schedule 21.07.2020

Если вы хотите выполнить один и тот же запрос как в MySQL, так и в HSQLDB, вам нужно создать функцию STR_TO_DATE в HSQLDB. Вам также необходимо использовать в запросе символ одинарной кавычки: str_to_date('" + now + "','%d/%m/%Y %H:%i') (эти кавычки соответствуют стандарту SQL).

Будет проще, если вы используете стандартный формат SQL «ГГГГ-ММ-ДД чч: мм: сс» (например, «2020-07-21 14:30:00») для вашей переменной «сейчас» и строки формата, которую вы используете с MySQL. В этом случае функция HSQLDB просто создается как:

CREATE FUNCTION STR_TO_DATE(STR VARCHAR(30), FORMAT VARCHAR(40) ) 
 RETURNS TIMESTAMP
 RETURN CAST(STR AS TIMESTAMP);

Выполните оператор CREATE FUNCTION один раз при подключении к базе данных, и вы сможете использовать его во всех своих запросах и операторах upade.

person fredt    schedule 21.07.2020