База данных H2 удаляет записи старше определенных дней - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно удалить все записи из базы данных H2, сопоставив столбец completed_date с отметкой текущего времени, где разница в днях больше 1 (или количества дней).

Существует одна проблема ссхема базы данных, в которой completed_date хранится в виде строки в заданном формате 11-Jan-2018 15:35:30 PM, т. е. 'dd-MMM-yyyy HH:mm:ss aaa'.

Есть еще несколько параметров, для которых должно совпадать состояние.

Яполучение этого исключения

Невозможно проанализировать константу "TIMESTAMP" "28-12-2017 03:12:47";Оператор SQL:

Я написал следующий запрос:

delete from TABLE_NAME
where 
status = 'status1'
OR status = 'status2'
OR status = 'status3' 
AND
TIMESTAMPDIFF(DAY,TO_CHAR(PARSEDATETIME(completed_date,'dd-MMM-yyyy HH:mm:ss    
aaa'),'dd-MM-yyyy HH:mm:ss'),CURRENT_TIMESTAMP()) >= 1; 

В приведенном выше запросе я обнаружил, что TIMESTAMPDIFF не работает с форматом даты dd-MMM-гггг ЧЧ: mm: ss aaa, поэтому сначала я попытался разобрать его в формате 'dd-MM-гггг ЧЧ: мм: сс', и если использовать этот запрос ниже, он даст мне правильный результат

SELECT TO_CHAR(PARSEDATETIME('2017-OCT-2017 15:49:47 PM','dd-MMM-yyyy 
HH:mm:ss aaa') 
,'dd-MM-yyyy HH:mm:ss') 

Просто дать несколькобольше информации о том, что я кодирую Workfusion, инструмент RPA, который внутренне использует базу данных h2, поэтому, если кто-то из workfusion здесь, они также могут мне помочь.

1 Ответ

0 голосов
/ 10 октября 2018

timestampdiff() принимает две метки времени в качестве входных данных, однако вы передаете строку и метку времени.Таким образом, строка преобразуется обратно в метку времени, используя некоторый формат по умолчанию.

Вы должны использовать:

TIMESTAMPDIFF(DAY,PARSEDATETIME(completed_date,'dd-MMM-yyyy HH:mm:ss aaa'), CURRENT_TIMESTAMP())

(при условии, что parsedatetime() может успешно проанализировать строку)

...