Подтвердить что ты не робот

Использование функции 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" следует использовать для этого формата с миллисекундами?

Спасибо заранее!

4b9b3361

Ответ 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.

Надеюсь, что это поможет.

Ответ 4

Вы должны изменить класс даты на метку времени.

String s=df.format(c.getTime());
java.util.Date parsedUtilDate = df.parse(s);  
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedUtilDate.getTime());