oracle表t里一个时间字段dt为date类型。我要查找某一天(2010-05-10)的数据,下面哪种方式效率高?
1.
select * from t where to_date(dt) = to_date('2010-05-10','yyyy-mm-dd')
2.
select * from t where dt between to_date('2010-05-10','yyyy-mm-dd') and to_date('2010-05-10','yyyy-mm-dd') + 1;
3.
select * from t where dt >= to_date('2010-05-10','yyyy-mm-dd') and dt < to_date('2010-05-10','yyyy-mm-dd') + 1;
谢谢大家。
1.
select * from t where to_date(dt) = to_date('2010-05-10','yyyy-mm-dd')
2.
select * from t where dt between to_date('2010-05-10','yyyy-mm-dd') and to_date('2010-05-10','yyyy-mm-dd') + 1;
3.
select * from t where dt >= to_date('2010-05-10','yyyy-mm-dd') and dt < to_date('2010-05-10','yyyy-mm-dd') + 1;
谢谢大家。
个人感觉下面会好些
select * from t where to_char(dt,'yyyy-mm-dd') ='2010-05-10';
只看时间的话 在sqlplus中先set timing on;
再执行下 结果就一目了然了
-- 效率都会很低,为什么左、右两边都要用to_date函数呢?那两边都不用(那样效率不是更高?),不是一回事吗?
-- 这样:如果dt字段有索引的话,就会用到此索引,这样效率才是最高的!
-- 例如:查询'2010-05-10'这一天的数据,查询语句如下所示:select * from t
where dt >= to_date('2010-05-10','YYYY-MM-DD')
and dt < to_date('2010-05-11','YYYY-MM-DD');
select * from t where dt = to_date('2010-05-10','yyyy-mm-dd')
不需要在dt前头加to_date了。
dt是日期字段,建上索引,应该so快了。