67

我必须在 Oracle DB 中执行一些插入操作。我有以下格式的日期

'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 - “日期格式无法识别”)。

对于这种格式,我应该以毫秒为单位使用哪个“字符串”?

提前致谢!

4

5 回答 5

108

OracleDATE不会以超过一秒的精度存储时间。您不能将毫秒精度数据存储在DATE列中。

您的两个选项是在将其转换为之前截断毫秒的字符串 a 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' )
于 2012-02-07T16:46:10.450 回答
14

TO_DATE 支持转换为不支持毫秒的 DATE 数据类型。如果您想在 Oracle 中支持毫秒,您应该查看 TIMESTAMP 数据类型和 TO_TIMESTAMP 函数。

希望有帮助。

于 2012-02-07T16:46:36.720 回答
8

SS.FF您可以在几毫秒内尝试这种格式:

to_timestamp(table_1.date_col,'DD-Mon-RR HH24:MI:SS.FF')

更多详情:
https ://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm

于 2017-04-25T09:15:34.583 回答
7

三位数毫秒:

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'),
于 2018-11-18T21:01:04.540 回答
-5

您必须将日期类更改为时间戳。

String s=df.format(c.getTime());
java.util.Date parsedUtilDate = df.parse(s);  
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedUtilDate.getTime());
于 2016-02-24T08:32:55.077 回答