Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PLSQL从字符串获取值_Sql_Oracle_Oracle11g - Fatal编程技术网

PLSQL从字符串获取值

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

我有这个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\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)|([^=]=.+?$)'))