Использование функции Oracle to_date для строки даты с миллисекундами - PullRequest
44 голосов
/ 07 февраля 2012

Я должен выполнить несколько вставок в БД 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 - «формат даты не распознан»).

Какую «строку» я должен использовать для этого формата с миллисекундами?

Заранее спасибо!

Ответы [ 5 ]

75 голосов
/ 07 февраля 2012

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' )
9 голосов
/ 07 февраля 2012

TO_DATE поддерживает преобразование в тип данных DATE, который не поддерживает миллисекунды.Если вам нужна поддержка миллисекунд в Oracle, вы должны взглянуть на тип данных TIMESTAMP и функцию TO_TIMESTAMP.

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

4 голосов
/ 25 апреля 2017

Вы можете попробовать этот формат SS.FF для миллисекунд:

yyyy-mm-dd HH:MI:SS.FF

Для более подробной информации:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm

0 голосов
/ 19 ноября 2018

Для трехзначной миллисекунды:

TO_CHAR(LN_AUTOD_UWRG_DTTM,'MM/DD/YYYY HH24:MI:SS.FF3')

Для шести цифр миллисекунды:

TO_CHAR(LN_AUTOD_UWRG_DTTM,'MM/DD/YYYY HH24:MI:SS.FF'),
0 голосов
/ 24 февраля 2016

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

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