与日期进行比较时忽略 WHERE 子句中的时间戳



我的表有这样的记录

23-MAY-11 11.40.39.000000 AM

以下查询不会带来任何内容

SELECT * 
  FROM my_table 
 WHERE tenant_pha = 'test'
   AND create_date >= TO_DATE('05/10/2011','mm/dd/yyyy')
   AND create_date <= TO_DATE('05/23/2011','mm/dd/yyyy')

但是,下面的查询将带来数据

SELECT * 
  FROM my_table 
 WHERE tenant_pha = 'test'
   AND create_date >= TO_DATE('05/10/2011','mm/dd/yyyy')
   AND create_date <= TO_DATE('05/24/2011','mm/dd/yyyy')

我认为这是因为create_date列是时间戳。

如何更改查询以带来所需的结果(我想避免在左侧列上执行函数,因为它们会使查询变长)。

你对时间戳的看法是对的。 "05/23/2011"与"05/23/2011 12:00 AM"相同。

为了包括一整天,我通常会将日期提前一天。 <'05/24/2011' 将包括 5/23 的所有内容。

或更改为 '05/23/2011 23:59:59'

你可以毫无问题地使用 trunc(),你只需要创建一个基于函数的索引。

如果创建此索引:

CREATE INDEX idx_trunc_date ON my_table (trunc(create_date));

然后,以下条件将使用该索引:

AND trunc(create_date) >= TO_DATE('05/10/2011','mm/dd/yyyy')

相关内容

  • 没有找到相关文章

最新更新