【问题标题】:Oracle comparing timestamp with dateOracle比较时间戳和日期
【发布时间】:2012-09-26 20:02:54
【问题描述】:

我有一个时间戳字段,我只想在我的 Oracle 查询中比较它的日期部分

我该怎么做,

SELECT *
FROM Table1
WHERE date(field1) = '2012-01-01' 

【问题讨论】:

  • 您应该依赖隐式数据转换。 '2012-01-01' 不是日期,而是字符文字。您应该始终使用 to_date() 或 ANSI DATE 文字来确保当 NLS 设置不同时您的 SQL 不会中断。

标签: oracle


【解决方案1】:

你可以truncate日期部分:

select * from table1 where trunc(field1) = to_date('2012-01-01', 'YYYY-MM-DD')

这种方法的问题在于,由于函数调用,field1 上的任何索引都不会被使用。

或者(并且对索引更友好)

select * from table1 
 where field1 >= to_timestamp('2012-01-01', 'YYYY-MM-DD') 
   and field1 < to_timestamp('2012-01-02', 'YYYY-MM-DD')

【讨论】:

    【解决方案2】:

    to_date 格式对我有用。请考虑日期格式: MON-MM.-

    t.start_date >= to_date('14.11.2016 04:01:39', 'DD.MM.YYYY HH24:MI:SS')
    t.start_date <=to_date('14.11.2016 04:10:07', 'DD.MM.YYYY HH24:MI:SS')
    

    【讨论】:

      【解决方案3】:

      你可以截断日期

      SELECT *
      FROM Table1
      WHERE trunc(field1) = to_Date('2012-01-01','YYY-MM-DD')
      

      查看SQL Fiddle 了解更多示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多