本帖最后由 qulimin18 于 2009-07-28 14:10:24 编辑

解决方案 »

  1.   

    没有什么大的区别!要用表达式的都是case when!
      

  2.   

    当decode满足不了时就用case when.
      

  3.   

    case 里可以写>,in 等表达式,decode只是=
      

  4.   

    case可以用多个不同的字段来进行判断。case的功能强与decode,
      

  5.   

    case在SQL中有两种写法,先建立一个表
    create table salgrade(grade int, sal int);insert into salgrade values(1,1000);
    insert into salgrade values(2,2000);
    insert into salgrade values(3,3000);
    commit;第一种写法,简单写法:
    select grade,sal,
       case grade
            when 1 then 'low'
            when 2 then 'middle'
            else 'high'
       end
    from salgrade;第二种写法,查找写法:
    SELECT grade,sal,
        case when sal<=1000 then 'low'
             when sal<=2000 then 'middle'
             else 'high'
        end
      FROM salgrade;decode只能代替第一种写法:
    select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;
      

  6.   


    简单说,decode中的if...then之后的只能是变量或具体的值,不能是表达式,是不是这个意思?
      

  7.   

    decode是pl/sql语法,只能在oracle中使用,
    case when是标准SQL的语法,哪儿都能用,也就是说移植性更强.decode像是case when的精简版,
    当要实现的功能比较简单时,用decode方便,简洁.
      

  8.   

    书上还说了一点:case 表达更清晰,而且它与ansi兼容,已成为sql/92标准的一部分
    实现原理差不多,case更强大
      

  9.   

    回7楼,是这样,正如4楼所说: case 里可以写>,in 等表达式,decode只是=
      

  10.   

    case when 所有的数据库都通用decode oracle语法,功能都差不多不过习惯了case when的写法
      

  11.   

    case when可以判断多个条件,功能更加强大,decode判断单个条件好一点,
      

  12.   

     case 里可以写>,in 等表达式,decode只是=
    本人用decode比较多
      

  13.   

    建函数索引的时候用decode比较好,oracle会自动转换case when导致无法使用到索引哦
      

  14.   

    根據個人在oracle 8.1.7中應用,談一下經驗.
    case when 語句可以做的 decode()語句都可以實現.
    但是在oracle 8.1.7中存儲過程中不識別case when 語句(不知道後面的版本是否也有限制).
     case when 中用in的話= decode(字段,條件1,值1,條件2,值2.....)
     case when 中用>或<的話 =decode(sign(字段1-字段2),1,字段1>字段2時的值,0,字段1=字段2時的值,-1,字段1<字段2時的值)
      

  15.   

    decode只能支持等于, case可以大于小于等于, case功能强些
      

  16.   

    第二种写法的decode替代:
    SELECT grade,sal,
         decode(sign(sal-1000),1,decode(sign(sal-2000),1,'high','middle'),'low')
    FROM salgrade;