Использование функции Oracle to_date для строки даты с миллисекундами
Мне нужно выполнить некоторые вставки в БД Oracle. У меня есть несколько дат
в следующем формате
'23.12.2011 13:01:001'
Следуя документации, я написал вставки to_date следующим образом:
to_date('23.12.2011 13:01:01', 'DD.MM.YYYY HH24:MI:SS')
который работает правильно. Теперь у меня есть даты с миллисекундами с форматом
'23.12.2011 13:01:001'
Я пробовал следующее:
to_date('23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3')
который является неправильным (выдает сообщение об ошибке 01821. 00000 - "формат даты не распознан" ).
Какую "String" следует использовать для этого формата с миллисекундами?
Спасибо заранее!
Ответы
Ответ 1
Oracle DATE
не сохраняет время с большей точностью, чем секунда. Вы не можете хранить миллисекундные данные точности в столбце DATE
.
Ваши два варианта: либо усечь строку миллисекунд, прежде чем преобразовать ее в DATE
, т.е.
to_date( substr('23.12.2011 13:01:001', 1, 19), 'DD.MM.YYYY HH24:MI:SS' )
или преобразовать строку в TIMESTAMP
, которая поддерживает миллисекундную точность
to_timestamp( '23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3' )
Ответ 2
TO_DATE поддерживает преобразование в тип данных DATE, который не поддерживает миллисекунды. Если вам нужна поддержка миллисекунд в Oracle, вы должны посмотреть на тип данных TIMESTAMP и TO_TIMESTAMP.
Надеюсь, что это поможет.
Ответ 3
Вы можете попробовать этот формат SS.FF
для миллисекунд:
yyyy-mm-dd HH:MI:SS.FF
Подробнее:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm
Ответ 4
Вы должны изменить класс даты на метку времени.
String s=df.format(c.getTime());
java.util.Date parsedUtilDate = df.parse(s);
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedUtilDate.getTime());