表QQTBL包含字段finishidate,类型VARCHAR2,值如同“2007-04-08”,要从表中取出前5天的所有记录,这个条件SQL这么写?写成如下四种形式都不对。应该如何写?1)(cast(finishidate as date) between (sysdate - 5) and sysdate)2)(cast((select to_char(sysdate,'yyyy-mm-dd') value from dual) as date) - cast(finishidate as date) >=5)3)(trunc(sysdate) - cast(finishidate as date) >=5)4)(sysdate - cast(finishidate as date) >=5)

解决方案 »

  1.   


    包括今天在内的5天
    finishidate > to_char(sysdate - 5 , 'yyyy-mm-dd')
    不包括今天的5天finishidate between to_char(sysdate - 5 , 'yyyy-mm-dd') and  to_char(sysdate-1 , 'yyyy-mm-dd')同格式字符串比较时,会从高位到低位依次比较,所以不用转化为日期也可以成功比较;
    字段比较时尽量不要进行运算,这样可以应用到字段上的索引,提高查询效率