我的表有这样的记录
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')