Я думаю, вы хотите использовать TO_TIMESTAMP - date не может хранить ваши миллисекунды, поэтому он не понимает 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
Если ваше время str равно a.m.
, используйте второй SUBSTR , -4, 4)
- "начать справа, 4 места слева, затем взять 4 символа"
Если миллис всегда равен 00000000, вы можете убрать это с помощью REPLACE(timeStr, '.00000000 ', '')
вместо
person
Caius Jard
schedule
06.04.2020