Я думаю, что вы хотите использовать TO_TIMESTAMP - дата не может хранить ваши миллисекунды, поэтому она не понимает FF
select to_timestamp('29-MAY-19 09.01.16.00000000 PM','dd-mon-yy hh.mi.ss.FF8 AM') from dual
Примечание, как указал GMB, вы не можете получить oracle для разбора a.m
- вам придется сделать это либо a.m.
, либо am
. Никаких полумер :) (надеюсь, это ошибка при копировании пасты)
Если вы отчаянно нуждаетесь в использовании TO_DATE, отрежьте миллисекунды:
select
to_date(
SUBSTR('29-MAY-19 09.01.16.00000000 PM', 1, 18) || SUBSTR('29-MAY-19 09.01.16.00000000 PM', -2, 2),
'dd-mon-yy hh.mi.ssAM'
)
from dual
Если ваше время стр заставьте второй SUBSTR использовать , -4, 4)
- «начать справа, 4 места слева, затем взять 4 символа»
Если миллис всегда равен 00000000, вы можете сделать это с помощью REPLACE(timeStr, '.00000000 ', '')
вместо