我现在数据库里面的日期是用varchar类型, 然后我现在用string字符串去查询在此时间类的数据
如  数据库表TableA有一个字段  date  类型 varchar  
    A 
    20080809155348
    20080810155348
    20080821155348然后我现在要用String  startRq = "20080809"; String endRq="20080827";查出在此期间的数据;我该怎么写sql语句,是不是都要把他们转换为date类型再用between来取;
sql="select * from TableA  a where to_date(a.date,'yyyy-mm-dd') between to_date(startRq,'yyyy-mm-dd') and to_date(endRq,'yyyy-mm-dd') ";

解决方案 »

  1.   

    可以考虑用to_char!sql="select * from TableA a where to_char(a.date,'yyyy-mm-dd') between to_char(startRq,'yyyy-mm-dd') and to_char(endRq,'yyyy-mm-dd') ";
      

  2.   


    --直接用就是了:
    sql="select * from TableA a where substr(a.date,1,8) between startRq and endRq ";
      

  3.   


    用to_date 可以吗?、 哪个速度会比较快点??
      

  4.   


    由于你TableA有一个字段 date是varchar2类型的,不是DATE类型,因此这样是错误的_char(a.date,'yyyy-mm-dd')
    varchar2类型,可以直接用between  and  --直接用就是了:
    sql="select * from TableA a where substr(a.date,1,8) between startRq and endRq ";
      

  5.   


    ----字母可以用to_char startRq = "20080809"; String endRq="20080827"; 这个用还碰巧是对了
    ----如果是startRq = "20080831"; String endRq="20080901";那计算不是70天啊,本来只相隔2天
    select *
      from TableA a
     where to_date(a.date, 'yyyy-mm-dd') between to_date(startRq, 'yyyy-mm-dd') and
           to_date(endRq, 'yyyy-mm-dd')
      

  6.   


    我忘记一个东西了   
    String startRq = "2008-08-09"; String endRq="2008-08-27";这样格式的;那我岂不是还要把这些查询条件转换为20080809这样格式的, 感觉这样的话 我用to_date更方便了。 请问哪个比较好??
      

  7.   


    这里只能用to_date, 不能用to_char
      

  8.   

    用to_date实行起来比较简单,但不知道你表里的数据量多大,如果效率要求高的话,我建议你把String startRq = "2008-08-09"; String endRq="2008-08-27";转换成20080809这样格式的,sql中类型转化影响效率