Используйте case when
и правильно обрабатывайте все случаи, например, как здесь:
with t(str) as (
select '16:43:48' from dual union all
select 'AA:17:01' from dual union all
select '01:12:25' from dual union all
select '24:33:07' from dual )
select str, case
when str like '24%' then '00'||substr(str, 3)
when str like 'AA%' then '12'||substr(str, 3)
else str
end corrected
from t
В моих примерах две строки были неправильными, и 24
был изменен на 00
и AA
на 12
.
Затем вы можете проверить, все ли времена в порядке, используя:
select to_date(corrected, 'hh24:mi:ss') from (...previous query...)
Если что-то все еще не так, вы получаете ошибки, такие как ORA-01850, 01851, 01858. Вы можете найтиневерные значения в цикле PLSQL или при использовании регулярных выражений.