【问题标题】:Query oracle Db for data between two dates查询 oracle Db 两个日期之间的数据
【发布时间】:2022-11-30 14:56:23
【问题描述】:

尝试查询日期格式为 2022-06-22T12:25:06.087 (LocalDateTime.now().toString()) 的 oracle 数据库表。用于该表的列类型是 varchar2。 试图查询两个日期之间的数据。我尝试了以下但它导致错误“日期格式无法识别”:

select * from MY_TABLE
where to_date(created_time, 'yyyy-MM-ddTHH:mm:ss.SSS') 
between to_date('2022-07-03T10:15:06.091', 'yyyy-MM-ddTHH:mm:ss.SSS') 
and to_date('2022-07-03T10:15:06.091', 'yyyy-MM-ddTHH:mm:ss.SSS');

谁能帮我更正这个查询?

【问题讨论】:

    标签: sql oracle datetime


    【解决方案1】:

    我猜 created_time 列的数据类型为 DATETIMESTAMP绝不TO_DATE()TO_TIMESTAMP() 调用到已经是DATE 的值

    DATE 数据类型不支持小数秒,请改用TIMESTAMP。格式文字必须用双引号括起来。

    格式 HH 是我们的 12 小时格式。我假设您需要 24 小时格式,即 HH24mm(或MM)是月份,供分钟使用MI。格式标识符不区分大小写,所以SSS 也是错误的。

    试试这个:

    select * 
    from MY_TABLE
    where created_time
       between TO_TIMESTAMP('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH24:MI:ss.ff3') 
       and TO_TIMESTAMP('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH24:MI:ss.ff3');
    

    【讨论】:

      【解决方案2】:

      您使用的格式看起来像数据(在CREATED_TIME 列中)存储为时间戳。如果是这样,你不应该兑换它到另一种数据类型(你选择TO_DATE函数)但保留它原样.如果您将数据存储为字符串(这通常是一个巨大的错误),则应用与 between 子句中格式模型相同的 to_timestamp 函数。

      除此之外,分钟的格式模型是mi(不是mm;那是),而小数秒是 ff3(不是 sss)。

      SELECT *
        FROM my_table
       WHERE created_time 
         BETWEEN TO_TIMESTAMP ('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH24:mi:ss.ff3')
             AND TO_TIMESTAMP ('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH24:mi:ss.ff3');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-07
        • 2018-06-17
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        相关资源
        最近更新 更多