SQL語句做字串分割

來源:互聯網
上載者:User

--用Regexwith t as (select '廣東,廣西,海南,貴州,雲南' str from dual)SELECT REGEXP_SUBSTR(str,'[^,]+',1,ROWNUM) province  FROM tCONNECT BY ROWNUM<=LENGTH(str)-LENGTH(REPLACE(str,','))+1;--不使用正則with t as (select '廣東,廣西,海南,貴州,雲南' str from dual)SELECT substr(str,instr(','||str, ',', 1, rownum) ,       instr(str||',', ',', 1, rownum)          - instr(','||str, ',', 1, rownum)) province  FROM tCONNECT BY ROWNUM<=length(str)-length(replace(str,',',''))+1;
PROVINCE----------------------------廣東廣西海南貴州雲南

substr( string, start_position, [ length ] ),取得字串中指定起始位置和長度的字串
string  必需。規定要返回其中一部分的字串。
start   必需。規定在字串的何處開始。正數 - 在字串的指定位置開始 負數 - 
   在從字串結尾的指定位置開始 0 - 在字串中的第一個字元處開始
length  可選。規定要返回的字串長度。預設是直到字串的結尾。
        正數 - 從 start 參數所在的位置返回 負數 - 從字串末端返回
 如: substr('This is a test', 6, 2)  would return 'is'
     substr('This is a test', 6)     would return 'is a test'
     substr('TechOnTheNet', -3, 3)   would return 'Net'
     substr('TechOnTheNet', -6, 3)   would return 'The'
     substr('Thisisatest', -4, 2)    would return 'te'
     
instr(string1,string2,start_position,nth_appearance ),返回要截取的字串在源字串中的位置。只檢索一次,就是說從字元的開始到字元的結尾就結束。
string1   源字串,要在此字串中尋找。
string2   要在string1中尋找的字串 。
start_position  代表string1 的哪個位置開始尋找。此參數可選,如果省略預設為1. 字串索引從1開始。如果此
  參數為正,從左至右開始檢索,如果此參數為負,從右至左檢索,返回要尋找的字串在源字串中的開始索引。
nth_appearance  代表要尋找第幾次出現的string2. 此參數可選,如果省略,預設為 1.如果為負數系統會報錯。
select  instr('aa,bb,cc,dd,ee,ff', ',', 1,1) from dual;--3
select  instr('aa,bb,cc,dd,ee,ff', ',', 1,2) from dual;--6
select  instr('aa,bb,cc,dd,ee,ff', ',', -1,1) from dual;--15

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.