我的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';
但是当我尝试执行查询时,数据库访问权限已满。这意味着索引无法正常工作。
答案 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 ;