1.根据日期字符串查询:结果正确,但是日期字段的索引无效
select sum(yse.fmonthamount) famount from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid
              INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid 
              WHERE lb.ffname = temp.fcusid AND to_char(yse.ffdate,'yyyy-mm-dd') = to_char(fdate,'yyyy-mm-dd') 
               GROUP BY  lb.ffname       
2.根据日期范围查询:索引有效但是,结果不正确
select sum(yse.fmonthamount) famount from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid
              INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid 
              WHERE lb.ffname = temp.fcusid AND  yse.ffdate >  fdate-1 AND yse.ffdate < fdate+1              
                GROUP BY  lb.ffname       
不正确原因:yse.ffdate >  fdate-1 会将当天中午12点以后的数据查处,yse.ffdate < fdate+1   同理
举例:fdate = to_date('2008-05-02','yyyy-mm-dd')
1.   yse.ffdate :01-5月 -08 03.12.49.796000 下午      
      yse>fdate-1 :为真2.   yse.ffdate :01-5月 -08 12.00.00.000000 上午  
      yse>fdate-1 :为假各位有没有遇到类似的问题,请指教。多谢

解决方案 »

  1.   

    select sum(yse.fmonthamount) famount from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid 
                  INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid  
                  WHERE lb.ffname = temp.fcusid AND  yse.ffdate=fdate                
    GROUP BY  lb.ffname;
      

  2.   

    上面的写错了,应该是这样:
    select sum(yse.fmonthamount) famount from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid  
                  INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid   
                  WHERE lb.ffname = temp.fcusid AND  yse.ffdate=trunc(fdate,'dd')                 
    GROUP BY  lb.ffname;
      

  3.   

    select sum(yse.fmonthamount) famount from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid 
                  INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid  
                  WHERE lb.ffname = temp.fcusid AND yse.ffdate = trunc(fdate)  
                   GROUP BY  lb.ffname  
      

  4.   

    要是查询一个日期范围怎么办?
       select lb.ffname,yse.fmonthamount famount,yse.ffdate  from t_ryy_tjlbyusuan ys INNER JOIN t_ryy_jbtjlb lb ON ys.ftjlbid = lb.fid
                  INNER JOIN t_ryy_tjlbyusuanentry yse ON ys.fid = yse.fparentid 
                  WHERE  yse.ffdate > trunc(to_date('2008-05-02','yyyy-mm-dd'),'dd') -1 
                  AND yse.ffdate < trunc(to_date('2008-05-02','yyyy-mm-dd'),'dd') +1         lb.ffname   famount                     yse.ffdate
    1 正餐 944163.6900000000 02-5月 -08 12.00.00.000000 上午
    2 架次 360.0000000000         01-5月 -08 03.12.49.796000 下午
    3 架次 360.0000000000         02-5月 -08 03.12.49.796000 下午
    4 服务费 223136.4700000000      01-5月 -08 03.18.40.578000 下午
    5 服务费 223136.4700000000 02-5月 -08 03.18.40.578000 下午
    6 其它 470077.9800000000 01-5月 -08 03.17.32.296000 下午
    7 其它 470077.9800000000 02-5月 -08 03.17.32.296000 下午
    8 干货 124199.3700000000 01-5月 -08 03.17.55.343000 下午
    9 干货 124199.3700000000 02-5月 -08 03.17.55.343000 下午
    10 仓租 3311.2000000000         01-5月 -08 03.18.58.265000 下午
    11 仓租 3311.2000000000         02-5月 -08 03.18.58.265000 下午
    12 配餐量 55000.0000000000 01-5月 -08 03.13.57.453000 下午
    13 配餐量 55000.0000000000 02-5月 -08 03.13.57.453000 下午
    14 食水 34595.5300000000 01-5月 -08 03.18.15.046000 下午
    15 食水 34595.5300000000 02-5月 -08 03.18.15.046000 下午说明:我不想要5月1号的数据。比如查5月1号到5月10号但是不包括1,10号的数据
      

  5.   

    WHERE  yse.ffdate between to_date('2008-05-02','yyyy-mm-dd') 
    and to_date('2008-05-09','yyyy-mm-dd')
      

  6.   

    呵呵,看来只能用>=,不能用>