try:select rownum nid,distinct substr(citycode,1,instr(citycode||'_','_')-1) citycode
from a;

解决方案 »

  1.   

    select distinct * from (select rownum rid,substr(citycode,1,decode(instr(citycode,'_'),0,length(citycode),instr(citycode,'_')-1)) citycode from t1);
      

  2.   

    14:32:44 SQL> select * from a;       NID CITYCODE
    ---------- ----------
           266 010
           267 020
           268 029_49
           277 029_57
           278 0311
           287 0311_6
           288 0311_7
           297 0431_13
           298 0431_17已选择9行。已用时间:  00: 00: 00.16
    14:32:49 SQL> select rownum rid,citycode from (select distinct substr(citycode,1
    ,decode(instr(citycode,'_'),0,length(citycode),instr(citycode,'_')-1)) citycode
    from a);       RID CITYCODE
    ---------- --------------------
             1 010
             2 020
             3 029
             4 0311
             5 0431已用时间:  00: 00: 00.15
      

  3.   

    select rownum nid,t.*
    from (select distinct substr(citycode,1,instr(citycode||'_','_')-1) citycode
    from a) t;
      

  4.   

    实现了,谢谢楼上两位。但有一点没看懂,就是citycode||'_'  这是什么意思? 还有两个竖是什么意思?
      

  5.   

    citycode||'_'  
    这样做的目的是防止处理那些不包含'_'的数据时出现问题
    如果没有'_',instr()函数就会返回0,这样就有问题了。
    所以在所有数据后面统一加上了'_'。
      

  6.   

    感谢     zmgowin(隐者(龙祖宗)) 
       bzszp(SongZip)