首页 > 解决方案 > Oracle 字符串转换

问题描述

在将以下字符串转换为所需格式时需要帮助。我将有如下几个值。有没有一种简单的方法可以使用 REGEXP 或更好的方法来做到这一点?

当前格式来自 A 列

Region[Envionment Lead|||OTC|||06340|||List Program|||TX|||Z3452|||Souther Region 05|||M7894|||California Divison|||Beginning]

Region[Coding Analyst|||BA|||04561|||Water Bridge|||CA|||M8459|||West Region 09|||K04956|||East Division|||Supreme]

A列所需格式

Region[actingname=Envionment Lead,commonid=OTC,insturmentid=06340,commonname=List Program]

Region[actingname=Coding Analyst,commonid=BA,insturmentid=04561,commonname=Water Bridge]

修改后的数据

**Column data**  
Region[Coding Analyst|||BA|||reg pro|||04561|||08/16/2011|||Board member|||AZ|||06340|||Whiter Bridge|||CA|||M0673|||West Region 09|||K04956|||East Division|||Supreme]

**required Data** 
{actingname=06340, actingid=M0673, insturmentid=BA, insturmentname=Coding Analyst, commonname=West Region 09, stdate=08/16/2011, linnumber=04561, linstate=CA, linname=Supreme}

问题是获取字符串的 10、11、12 和 15 位置。我可以得到任何低于第 10 个位置的东西,但不能得到 10 个或更多的字符串位置。你能指导我我在这里缺少什么吗

'{actingname=\8,actingid=\11,insturmentid=\2,insturmentname=\1,commonname=\12, stdate=\5,linnumber=4,linstate=10,linname=15}'--Here 10,11,12 and 15 posistion are not being fethched

标签: sqloracle

解决方案


我使用了 REGEXP_REPLACE

SELECT REGEXP_REPLACE(
    'Region[Envionment Lead|||OTC|||06340|||List Program|||TX|||Z3452|||Souther Region 05|||M7894|||California Divison|||Beginning]',
    '^Region\[([[:alpha:][:space:][:digit:]]*)\|\|\|([[:alpha:]]*)\|\|\|([[:digit:]]*)\|\|\|([[:alpha:][:space:][:digit:]]*).*',
    'Region[actingname=\1,commonid=\2,instrumentid=\3,commonname=\4]') as replaced
FROM dual

或者像更新一样

UPDATE table1 
SET col1 = REGEXP_REPLACE(
             col1,
             '^Region\[([[:alpha:][:space:][:digit:]]*)\|\|\|([[:alpha:]]*)\|\|\|([[:digit:]]*)\|\|\|([[:alpha:][:space:][:digit:]]*).*',
             'Region[actingname=\1,commonid=\2,instrumentid=\3,commonname=\4]')

推荐阅读