【问题标题】:Using Oracle to_date function for date string with milliseconds使用 Oracle to_date 函数处理以毫秒为单位的日期字符串
【发布时间】:2012-02-29 02:27:59
【问题描述】:

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

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

提前致谢!

【问题讨论】:

标签: oracle to-date


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      您可以尝试这种格式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

      【讨论】:

        【解决方案4】:

        三位数毫秒:

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

        【讨论】:

        • 咳嗽 '六位毫秒' 应该是 '6 位微秒'
        【解决方案5】:

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

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

        【讨论】:

        • Java 与 Oracle PL/SQL 有什么关系?
        猜你喜欢
        • 2021-09-13
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2012-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多