Вы не можете использовать to_date()
со своей строкой в том виде, как она есть, потому что часть .0
представляет миллисекунды - а тип данных даты Oracle не имеет точности в миллисекундах:
select to_date('1970-01-01 00:00:01.0','YYYY-MM-DD HH24:MI:SS') from dual;
ORA-01830: date format picture ends before converting entire input string
select to_date('1970-01-01 00:00:01.0','YYYY-MM-DD HH24:MI:SS.FF') from dual;
ORA-01821: date format not recognized
Эта ошибка связана с тем, что часть FF
модели не применяется к датам.
Вы можете преобразовать в метку времени:
select to_timestamp('1970-01-01 00:00:01.0','YYYY-MM-DD HH24:MI:SS.FF') from dual;
TO_TIMESTAMP('1970-01-0
-----------------------
1970-01-01 00:00:01.000
и затем, если вы действительно хотите, чтобы это было только в качестве даты, приведите ее к дате:
select cast(to_timestamp('1970-01-01 00:00:01.0','YYYY-MM-DD HH24:MI:SS.FF') as date) from dual;
CAST(TO_TIMESTAMP('
-------------------
1970-01-01 00:00:01
Или вы можете использовать строковую манипуляцию для удаления части доли секунды перед использованием to_date()
, или , если она всегда будет .0
- без изменений - , вы можете рассматривать это как константу часть модели формата [как уже показано @mathguy].
Также обратите внимание, что имеющееся у вас значение можно рассматривать как литерал метки времени, но только если все это фиксированное значение:
select timestamp '1970-01-01 00:00:01.0' from dual;
TIMESTAMP'1970-01-0100:
-----------------------
1970-01-01 00:00:01.000
и снова вы можете привести его к дате, если необходимо.