使用to_char(timestamp,'YYYY-MM-DD'))函数进行索引

时间:2018-08-07 12:25:34

标签: sql oracle indexing timestamp to-char

我的SQL where子句中包含以下内容。这是针对Oracle数据库运行的。时间戳字段在数据库中定义为时间戳字段。 我选择的查询是:

create index ind_timestamp on sms_in(to_char(timestamp,'YYYY-MM-DD'));

select * from sms_in where to_char(timestamp,'YYYY-MM-DD')in '2018-08-01';

但是当我尝试执行查询时,数据库访问权限已满。这意味着索引无法正常工作。

1 个答案:

答案 0 :(得分:3)

如果您一直在寻找特定日期的数据,那么我的建议如下:

您在timestamp列上添加普通索引

create index ind_timestamp on sms_in(timestamp);

您的选择可能看起来像

select * 
  from sms_in 
 where timestamp between to_date('2018-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
                     and to_date('2018-08-01 23:59:59','YYYY-MM-DD HH24:MI:SS');

或者您也可以这样做

select * 
  from sms_in 
 where timestamp >= to_date('2018-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
  and timestamp  <= to_date('2018-08-01 23:59:59','YYYY-MM-DD HH24:MI:SS');

编辑:

这个答案基本上是正确的,但是逻辑应该是:

select * 
 from sms_in 
 where timestamp >= date '2018-08-01' and
       timestamp < date '2018-08-02 ;