使用Oracle to_date函数作为日期字符串,以毫秒为单位

时间:2012-02-07 16:32:31

标签: oracle to-date

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

我应该使用哪个“字符串”这个格式用毫秒?

提前致谢!

5 个答案:

答案 0 :(得分:71)

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' )

答案 1 :(得分:9)

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

希望有所帮助。

答案 2 :(得分:5)

您可以尝试此格式SS.FF毫秒:

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

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

答案 3 :(得分:1)

持续三位数毫秒:

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'),

答案 4 :(得分:-3)

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

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