有一个表TABLE ,TABLE中有一个字段为MC,MC字段中的数据格式都是这样的5C07C1/41A$A61K31/16B ,”$“是用来区分两个数据,我想把里面的数据都变成这种格式C07C001/41A$ A61K031/16B这两种格式的区别是”1/“变成了“001/”和”31/“变成了”031/“ 变换规律是”/“前面数字位不足3位的就前面加0补成3位。还有ORACLE中有没有分割函数就是把数据从”$“处分成两个。
各位高手,谢谢了

解决方案 »

  1.   

    分开成两个字符
    SELECT SUBSTR(mc,1,INSTR(mc,'$')-1),SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)) FROM table
      

  2.   

    补0的那个为什么 前面有5C 后面就是 C 开头了?要前面那个5没有,且要补的数值都是从第5位开始的话,就可以用如下SQL出,否则可能就要用过程了。SELECT SUBSTR(SUBSTR(mc,1,INSTR(mc,'$')-1),1,4)||
           LPAD(SUBSTR(SUBSTR(mc,1,INSTR(mc,'$')-1),5,INSTR(SUBSTR(mc,1,INSTR(mc,'$')-1),'/')-5),3,'0')
       ||SUBSTR(SUBSTR(mc,1,INSTR(mc,'$')-1),INSTR(SUBSTR(mc,1,INSTR(mc,'$')-1),'/'),LENGTH(SUBSTR(mc,1,INSTR(mc,'$')-1))),
       SUBSTR(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)),1,4)||
           LPAD(SUBSTR(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)),5,INSTR(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)),'/')-5),3,'0')
       ||SUBSTR(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)),INSTR(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc)),'/'),LENGTH(SUBSTR(mc,INSTR(mc,'$')+1,LENGTH(mc))))
      FROM table
      

  3.   

    唉,连我自己看了都晕,受不了了,还是用PL/SQL写吧。这个可读性极差。
      

  4.   

    能告诉我哪里有比较好一点的oracle 方面的书