2012-02-07 5 views
32

Muszę wykonać kilka wstawek do bazy danych Oracle. Mam pewne daty w następującym formacieUżywanie funkcji Oracle to_date dla ciągu dat z milisekundami

'23.12.2011 13:01:001' 

Po dokumentacji pisałem wstawia TO_DATE następująco:

to_date('23.12.2011 13:01:01', 'DD.MM.YYYY HH24:MI:SS') 

który działa prawidłowo. Teraz mam termin z milisekund z formatem

'23.12.2011 13:01:001' 

próbowałem następujące:

to_date('23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3') 

który jest nieprawidłowe (dostarcza błąd 01821. 00000 - "nie format daty uznanej").

Który "ciąg" powinienem użyć dla tego formatu z milisekundami?

Z góry dziękuję!

+0

możliwe duplikat [ciąg do tej pory w Oracle z milisekund] (http: // stackoverflow.com/questions/1758219/string-to-date-in-oracle-with-milliseconds) –

Odpowiedz

54

Wyrocznia DATE nie zapisuje razy z dokładnością większą niż sekunda. Nie można przechowywać danych dokładności milisekund w kolumnie DATE.

Twoje dwie opcje są albo obciąć ciąg milisekund przed przekształceniem go w DATE, tj

to_date(substr('23.12.2011 13:01:001', 1, 19), 'DD.MM.YYYY HH24:MI:SS') 

lub przekonwertować ciąg do TIMESTAMP, dokłada precyzję wsparcie milisekundy

to_timestamp('23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3') 
7

TO_DATE obsługuje konwersję na typ danych DATE, który nie obsługuje milisekund. Jeśli chcesz obsługiwać milisekundę w Oracle, powinieneś spojrzeć na typ danych TIMESTAMP i funkcję TO_TIMESTAMP.

Nadzieję, że pomaga.

-2

Musisz zmienić klasę daty na datownik.

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

Co ma wspólnego Java z Oracle PL/SQL? –