Вчера кто-то вставил неверное значение в один из этих столбцов времени
Сделайте
SELECT * FROM EDUMAN_EXAM.EXAM_REGISTRATION
WHERE
NOT(
REGEXP_LIKE(EXAM_START_TIME, '^\d\d:\d\d:\d\d$') AND
REGEXP_LIKE(EXAM_END_TIME, '^\d\d:\d\d:\d\d$')
)
Найдите неверные данные и удалите их
Примечание: вы опубликовалиsql, который указывает, что столбцы времени хранят hh:mm:ss
, и вы сказали «это работает», но затем вы заявили, что столбцы времени не хранят секунды.Если они сохраняют секунды, используйте запрос, как указано выше.Если они не сохраняют секунды, уменьшите шаблон регулярных выражений до \d\d:\d\d
В качестве дополнительного комментария вы никогда не должны были принимать решение сохранять эти временные данные в виде строки.DATETIME, который содержит EXAM_START_DATE, может так же легко удерживать время, и если вы просто хотите, чтобы DATE без временной части, вы могли TRUNC(some_datetime)
удалить компонент времени
Сохранить данные в столбцеправильный тип, и вы не получите эту проблему, и вам не придется вступать в этот нелепый date -> string -> concatenate -> parse
процесс с тысячами записей