在与date匹配时忽略WHERE子句中的时间戳

时间:2011-05-23 16:57:21

标签: sql oracle datetime

我的表有这些记录

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列是时间戳。

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

2 个答案:

答案 0 :(得分:4)

你对时间戳是正确的。 '05 / 23/2011'与'05 / 23/2011 12:00 AM'相同。

要包括整天,我通常会将我的约会时间提前一天。 &LT; '05 / 24/2011'将包括所有5/23。

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

答案 1 :(得分:2)

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

如果您创建此索引:

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

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

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