我有一条语句是这样的:select succ_time,succ_time*1.0/tot from mytable where tot>0 and succ_time*1.0/tot>0.9就是计算成功率的。succ_time和tot字段都是整型数据,但是tot字段可能为0,我这条语句在执行的时候遇到tot为0的情况就会出错,该怎么避免呢?tot>0的条件好像不起作用。谢谢!

解决方案 »

  1.   

    一般情况下用异常捕获就可以了!
    Try
    A:=succ_time*1.0/tot ;
    Except
    A:=0
    End;
      

  2.   

    select succ_time,(case when tot>0 then 
    (case when succ_time*1.0/tot>0.9 
    then succ_time*1.0/tot end)end) as asd
     ) from mytable
      

  3.   

    我同事讲的也是bjgzxx(食人一族) 的方法,不知道还有没有其他方法?
      

  4.   

    select succ_time,succ_time*1.0/tot from
    ( select succ_time,tot from mytable where tot>0)
      

  5.   

    select succ_time,succ_time*1.0/tot from
    ( select succ_time,tot from mytable where tot>0)
    a
      

  6.   

    为什么select succ_time,succ_time*1.0/tot from mytable where tot>0 and succ_time*1.0/tot>0.9
    有tot>0的条件都没有用呢?
    我SQL查询分析器里把tot>0放到后面执行成功过两次,但后来就不行了,奇怪!
      

  7.   

    因为 tot>0 and succ_time*1.0/tot>0.9
    都作为条件可能有时候会 出现这个 succ_time*1.0/tot>0.9
    就出错
    你先把不等于0的查处来然后在做除法就不会出错了
      

  8.   

    select succ_time,expr=(case when tot<>0 then succ_time*1.0/tot else 0 end) from mytable where 
    ..............
      

  9.   

    用 try catch的异常捕捉,在sql server 2005里是支持的,
      

  10.   

    我的环境是SQL Server 2000+Delphi
      

  11.   

    你可以事先判断一下啊,
    if tot > 0
    begin
      xxxxxxxxxxxxxxxxx(你自己的代码若干)
    end
    else
      xxxxxxxxxxxxxxxxx