oracle选择查询以获取没有时间戳的最近30天的记录,并且不应使用截断

时间:2014-01-27 15:13:01

标签: oracle timestamp

oracle选择查询以获取最近30天的记录而不使用时间戳和截断函数不应该使用

select * from table where enterdate between today date and last 30 day before

我使用了select sysdate,(sysdate-30) from dual;

但时间戳正在考虑之中,但我想只考虑日期

如果我使用trunc((sysdate)-30)-6),这个截断函数会在执行期间减少性能批次以获得更多记录

因此使用了索引

1 个答案:

答案 0 :(得分:2)

select * from table where enterdate between TRUNC(SYSDATE-30) and TRUNC(SYSDATE) ;

对表列的任何函数调用都可能导致影响(除非基于函数的索引超过它),但 对值有影响。现在,当我们执行TRUNC(sysdate)时,这只会发生一次并且涉及的成本非常微不足道,因为它在列上不起作用。

TRUNC(SYSDATE)会在当前时间'00:00:00'中取消 TIME 元素。所以BETWEEN操作是完美的!并且您的INDEX范围扫描将会发生