2012-02-07 22 views
32

Tôi phải thực hiện một số chèn vào một DB Oracle. Tôi có một số ngày theo định dạng sauSử dụng hàm Oracle to_date cho chuỗi ngày với mili giây

'23.12.2011 13:01:001' 

Sau khi tài liệu tôi đã viết chèn to_date như sau:

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

mà hoạt động đúng. Bây giờ tôi có hẹn hò với mili giây với định dạng

'23.12.2011 13:01:001' 

Tôi đã thử những điều sau đây:

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

đó là không chính xác (mang lại một lỗi 01821. 00000 - "định dạng ngày không được công nhận").

Tôi nên sử dụng "Chuỗi" nào cho định dạng này bằng mili giây?

Cảm ơn trước!

+0

thể trùng lặp của [String để ngày trong Oracle với mili giây] (http: // stackoverflow.com/questions/1758219/string-to-date-in-oracle-with-milliseconds) –

Trả lời

54

Một Oracle DATE không lưu trữ thời gian với độ chính xác cao hơn một giây. Bạn không thể lưu trữ dữ liệu chính xác mili giây trong cột DATE.

hai lựa chọn của bạn là để một trong hai truncate chuỗi của mili giây trước khi chuyển đổi nó thành một DATE, tức là

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

hoặc để chuyển đổi chuỗi thành một TIMESTAMP mà không hỗ trợ millisecond chính xác

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

TO_DATE hỗ trợ chuyển đổi thành kiểu dữ liệu DATE, không hỗ trợ mili giây. Nếu bạn muốn hỗ trợ mili giây trong Oracle, bạn nên xem kiểu dữ liệu TIMESTAMP và hàm TO_TIMESTAMP.

Hy vọng điều đó sẽ hữu ích.

-2

Bạn phải thay đổi lớp ngày thành dấu thời gian.

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

Java phải làm gì với Oracle PL/SQL? –

Các vấn đề liên quan