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)
,这个截断函数会在执行期间减少性能批次以获得更多记录
因此使用了索引
答案 0 :(得分:2)
select * from table where enterdate between TRUNC(SYSDATE-30) and TRUNC(SYSDATE) ;
对表列的任何函数调用都可能导致影响(除非基于函数的索引超过它),但 不 对值有影响。现在,当我们执行TRUNC(sysdate)
时,这只会发生一次并且涉及的成本非常微不足道,因为它在列上不起作用。
TRUNC(SYSDATE)
会在当前时间'00:00:00'
中取消 TIME 元素。所以BETWEEN
操作是完美的!并且您的INDEX范围扫描将会发生