【问题标题】:Comparing Date field with specific datetime in oracle将日期字段与oracle中的特定日期时间进行比较
【发布时间】:2021-01-11 07:48:40
【问题描述】:

我有一个带有日期字段time_process 的表格,例如'1/11/2021 5:10:16 AM'

我要选择的记录有time_process >= '1/11/2021 05:00:00 AM' 但是当我查询时:

select * from DATA_RUN where time_process >= '1/11/2021 05:00:00 AM'

有错误:

[1]: ORA-01843: not a valid month

如何将此日期字段与特定日期时间进行比较?

【问题讨论】:

    标签: sql oracle datetime


    【解决方案1】:

    您应该使用to_date 将字符串转换为日期,如下所示:

    select * from DATA_RUN 
       where time_process >= To_date('01/11/2021 05:00:00 AM', 'mm/dd/yyyy hh:mi:ss AM')
    

    【讨论】:

      【解决方案2】:

      如果这是 DATE 数据类型列,请不要将其与字符串进行比较(因为:'1/11/2021 05:00:00 AM' 是字符串,而不是日期)。

      所以:

      select * 
      from data_run
      where time_process >= to_date('11.01.2021 05:00:00', 'dd.mm.yyyy hh24:mi:ss');
      

      【讨论】:

        【解决方案3】:

        选项 1 - 日期和间隔文字:

        SELECT *
        FROM   DATA_RUN
        WHERE  time_process >= DATE '2021-01-11' + INTERVAL '05:00:00' HOUR TO SECOND
        

        或者,既然你没有任何分钟或秒,那么你可以使用:

        WHERE  time_process >= DATE '2021-01-11' + INTERVAL '5' HOUR
        

        选项 2 - 时间戳文字:

        SELECT *
        FROM   DATA_RUN
        WHERE  time_process >= TIMESTAMP '2021-01-11 05:00:00'
        

        选项 3 - 使用 TO_DATE 函数转换字符串:

        SELECT *
        FROM   DATA_RUN
        WHERE  time_process >= TO_DATE( '1/11/2021 05:00:00 AM', 'MM/DD/YYYY HH12:MI:SS AM' )
        

        顺便说一句,

        我有一个带有日期字段time_process 的表格,例如'1/11/2021 5:10:16 AM'

        DATE 列没有格式,因为它以由7-bytes(世纪、世纪、月、日、小时、分钟和秒)组成的二进制格式在内部存储。格式化DATE 的值由用户界面决定;对于 SQL/Plus 和 SQL Developer(以及其他),这由 NLS_DATE_FORMAT 会话参数确定,但每个用户都可以随时在每个会话中设置自己的值,因此您不能假设会有一致的格式DATE 列。

        【讨论】:

          猜你喜欢
          • 2017-05-30
          • 1970-01-01
          • 2014-05-03
          • 1970-01-01
          • 2016-11-04
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 2016-07-24
          相关资源
          最近更新 更多