【发布时间】:2018-01-22 14:51:41
【问题描述】:
我正在使用 Oracle SQL 开发人员从数据库中选择数据。但是当我在 WHERE 子句中使用以下内容时,我得到了不同的结果:
-
date_column=trunc(sysdate)结果与 不同
-
trunc(date_column)=trunc(sydate)。
此外,即使我在表中有相应的数据,date_column = sysdate 也不会返回任何行。
【问题讨论】:
我正在使用 Oracle SQL 开发人员从数据库中选择数据。但是当我在 WHERE 子句中使用以下内容时,我得到了不同的结果:
date_column=trunc(sysdate) 结果与 trunc(date_column)=trunc(sydate)。此外,即使我在表中有相应的数据,date_column = sysdate 也不会返回任何行。
【问题讨论】:
是的。在 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 上的索引可用于过滤。
【讨论】: