PLSQL从字符串获取值
我有这个varchar22000字符串:PLSQL从字符串获取值,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有这个varchar22000字符串: id=100\nid2=0\nid3=0\dtext='more Text' 我只想获取值,例如更多文本或0 id3 我试图使用自定义拆分函数,其中分隔符为\n,但这仅返回我,例如id3=0。在这种情况下,我需要“0”作为结果 我怎样才能更有效地做到这一点 我只想获取值,例如更多文本 只需使用SUBSTR和INSTR 您可以通过以下方式获得所有值: WITH DATA AS (SELECT q'[id=100\nid2=0\nid3=0\ndtex
id=100\nid2=0\nid3=0\dtext='more Text'
我只想获取值,例如更多文本或0 id3
我试图使用自定义拆分函数,其中分隔符为\n,但这仅返回我,例如id3=0。在这种情况下,我需要“0”作为结果
我怎样才能更有效地做到这一点
我只想获取值,例如更多文本
只需使用SUBSTR和INSTR
您可以通过以下方式获得所有值:
WITH DATA AS
(SELECT q'[id=100\nid2=0\nid3=0\ndtext='more Text']' str FROM dual)
SELECT replace(substr(regexp_substr(str,'(=.+?\n)|(=.+?$)',1,level),2),'\n') v
FROM DATA
CONNECT BY LEVEL <= LENGTH(regexp_replace(str,'([^=]+=.+?\n)|([^=]=.+?$)'))
你的解决方案意味着,我必须计算每次发生的次数才能获得正确的内容,对吗?但如何获得id3的内容,例如?在我的解决方案中,我考虑了单引号之间的文本。你的意思是你需要在=符号之后立即获得所有值吗?是的,这就是我需要的哇,这太神奇了。我需要看看那些正则表达式。如何去掉引号,例如“更多文本”
WITH DATA AS
(SELECT q'[id=100\nid2=0\nid3=0\ndtext='more Text']' str FROM dual)
SELECT replace(substr(regexp_substr(str,'(=.+?\n)|(=.+?$)',1,level),2),'\n') v
FROM DATA
CONNECT BY LEVEL <= LENGTH(regexp_replace(str,'([^=]+=.+?\n)|([^=]=.+?$)'))