那是指创建一个基于函数的索引,
你也可以就用你原来的那个索引,在查询时注意要不要加函数,如
WHERE ACCDATE>=to_date('2005-08-01','yyyy-mm-dd')
AND   ACCDATE<to_date('2005-08-02','yyyy-mm-dd')这样就可以把索引用上了。

解决方案 »

  1.   

    既然你们习惯的日期格式是:YYYY-MM-DD
    那么你就个性一下日期格式的参数。alter session set nls_date_format='YYYY-MM-DD';然后在查询时:    select * from tname where date=to_date('2004-09-09','YYYY-MM-DD');然后在创建索引:
       create index i_date on tname(date);没有必要用函数索引了。
      

  2.   

    to_char(ACCDATE,'YYYY-MM-DD') ='2005-08-01' 你可以查看一下执行计划, 看是否使用了索引, 经过了计算可能就不使用索引了, 你可以这么做:WHERE ACCDATE=TO_DATE('2005-08-01','YYYY-MM-DD')
      

  3.   

    谢谢各位的解答!但是我有个困难在其中,因为我做了一个SQL TOOLS通用工具是用以帮助非专业人员编制SQL的,做成的SQL如:select a,b from table where dat=:Var0 and amt=:Var1。用户输入日期、金额后,将:Var0、:Var1替换,
    做成 WHERE ACCDATE>=to_date('2005-08-01','yyyy-mm-dd')
    AND   ACCDATE<to_date('2005-08-02','yyyy-mm-dd')
    就不太通用。  njhart2003() :那是指创建一个基于函数的索引,如何建立?
      

  4.   

    alter session set nls_date_format='YYYY-MM-DD';1。是针对整个数据库的用户,还是一个用户,因为我不想影响其他用户的使用。
    2。set nls_date_format设置后ACCDATE='2005-08-01'能精确查到吗?注意ACCDATE有分秒的。
      

  5.   

    基于函数的索引
    create index idx_name on tbname(to_date(col,'yyyy-mm-dd'));
      

  6.   

    一种方法就是按照楼上的方法建一个函数索引,....另一种是修改数据,如果用户只对日期有兴趣,对具体钟点时刻不感兴趣的话,那就修改一下数据,如
    update tabname set ACCDATE=trunc(ACCDATE);
    然后建一个普通索引,create index idx_name on tbname(ACCDATE);
    组装做成的SQL:select a,b from table where dat=to_date(:Var0,'yyyy-mm-dd') and amt=:Var1。
      

  7.   

    bzszp的方法就是创建基于函数的索引的方法了。