我的表有这些记录
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
列是时间戳。
如何更改查询以获得所需的结果(我希望避免在左侧列上执行函数,因为它们会使查询变长)。
答案 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')