oracle有个tab表的fld字段,是以半角逗号分隔的varchar2型,写个sql取前三个,比如:
's,z,t'得到's,z,t'
'szt'得到'szt'
's,zt'得到's,zt'
'song,z,t,u'得到'song,z,t'

解决方案 »

  1.   

    select 
        SUBSTR(fld,1,DECODE( INSTR(fld,',',1,3),0 ,LENGTH(fld),INSTR(fld,',',1,3)-1) 
    from 
        tab
      

  2.   

    漏了个反括号:select 
        SUBSTR(fld,1,DECODE( INSTR(fld,',',1,3),0 ,LENGTH(fld),INSTR(fld,',',1,3)-1) )
    from 
        tab
      

  3.   

    select nvl(substr(fld,1,instr(fld,',',1,3)-1),fld) from tab;
      

  4.   

    select nvl(substr(fld,1,instr(fld,',',1,3)-1),fld) from tab;
      

  5.   

    select nvl(substr(fld,1,instr(fld,',',1,3)-1),fld) from tab;
    当逗号个数少于3个的情况有问题吧
    select 
        SUBSTR(fld,1,DECODE( INSTR(fld,',',1,3),0 ,LENGTH(fld),INSTR(fld,',',1,3)-1) )
    from 
        tab
    似乎少了点,改造一下就可以,谢谢大家捧场