【问题标题】:Oracle SQL: clause Where : date_column=trunc(sysdate) result different to trunc(date_column)=trunc(sydate)Oracle SQL: 子句 Where : date_column=trunc(sysdate) 结果与 trunc(date_column)=trunc(sydate) 不同
【发布时间】:2018-01-22 14:51:41
【问题描述】:

我正在使用 Oracle SQL 开发人员从数据库中选择数据。但是当我在 WHERE 子句中使用以下内容时,我得到了不同的结果:

  • date_column=trunc(sysdate) 结果与
  • 不同
  • trunc(date_column)=trunc(sydate)

此外,即使我在表中有相应的数据,date_column = sysdate 也不会返回任何行。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    是的。在 Oracle 中,date 数据类型有点误导,因为它有一个时间组件。所以:

    date_column = trunc(sysdate)
    

    返回 date_column 正好在午夜刚刚过去的行。

    trunc(date_column) = trunc(sysdate)
    

    返回今天发生的任何事情。

    date_column = sysdate
    

    仅当时间组件匹配时才有效,这是极不可能的。

    我经常把逻辑写成:

    date_column >= trunc(sysdate) and date_column < trunc(sysdate + 1)
    

    此方法确保date_column 上的索引可用于过滤。

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 2012-08-17
      • 1970-01-01
      • 2018-06-02
      • 2019-06-10
      • 2017-05-23
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多