数据库中的字段是这样的存储的(字段: purmf_price
注意:purmf_price不是数值型的,如: 2,0.00,;1,17.70,;0,18.66,; 
组成方式:议价方式,单价,;议价方式,单价,;议价方式,单价,; 最多三组。
议价方式和数值的对应关系: 依合约价 0 依前购价1新价格 2 )
那我要显示的就是议价方式   单价
新价格     0.00
依前购价   17.70
新价格     18.66用SQL可以实现么??

解决方案 »

  1.   

    写存储过程可以实现。具体参考:
    http://topic.csdn.net/u/20071226/12/0b0d8daf-c261-4c3f-b252-a5fa4e588c06.html问题:
    外面的程序会给存储过程传递一个EmployeeId字符串:   "001,002,003,004".   我需要在Oracle中得到这个接受这个字符串。   并把这些Employee的表里删除。   用程序的语言就是,   我要把这个字符串分解成数组。   然后遍历数组删除表里的记录。 代码:
    create   or   replace   procedure   mytest(p_empnums   varchar2)   is 
        v_dmp_empnum   varchar2(30)   :=   null; 
        v_empnums         varchar2(300)   :=   null; 
    begin 
        dbms_output.enable(20000); 
        v_empnums   :=   p_empnums   ¦ ¦   ','; 
        < <continuee> > 
        if   instr(v_empnums,   ',')   =   0   then 
            v_dmp_empnum   :=   v_empnums; 
        else 
            v_dmp_empnum   :=   substr(v_dmp_empnum,   1,   instr(v_empnums,   ',',   1)   -   1); 
        end   if; 
        v_empnums   :=   substr(v_empnums, 
                                                instr(v_empnums,   ',',   1)   +   1, 
                                                length(v_empnums)); 
        --dbms_output.put_line(v_empnums ¦ ¦'-'); 
        delete   employee   where   empnum=v_dmp_empnum; 
        if   v_empnums   <>   ','   then 
            goto   continuee; 
        end   if; 
        commit; 
        --'001,002,003,004'   
    end; 
    / sql> set   serveroutput   on 
    sql> exec   mytest('001,002,003,004');
      

  2.   

    这里只能用存储过程或者客户端等
    一条sql恐怕难毕竟这里有个字符串的分解过程
      

  3.   

    嘿嘿,刚才试了一下还是可以的,不知道符不符合LZ要求 ..try it ..
    SQL> select purmf_price from tbtest;PURMF_PRICE
    --------------------------
    2,0.00,;1,17.70,;0,18.66,;SQL> 
    SQL>    select substr('#'||purmf_price,
      2                      instr('#'||purmf_price,'#',1,rn)+1,
      3                      instr('#'||purmf_price,',',1,rn)-instr('#'||purmf_price,'#',1,rn)-1) as nums,
      4            substr('#'||purmf_price,
      5                      instr('#'||purmf_price,',',1,rn)+1,
      6                      instr('#'||purmf_price,'#',1,rn+1)-instr('#'||purmf_price,',',1,rn)-1) as prices
      7       from (
      8             select replace(purmf_price,',;','#') as purmf_price from tbtest
      9            )t1,
     10            (
     11             select rownum as rn
     12               from all_objects a
     13              where rownum <= 5
     14            )tt
     15      where instr('#'||purmf_price,'#',1,rn) * instr('#'||purmf_price,',',1,rn) > 0;NUMS                     PRICES
    ------------------------ ------------------------
    2                        0.00
    1                        17.70
    0                        18.66