2015-01-27 6 views
2

У меня есть эта varchar2 (2000) строка:PLSQL Получение значения из строки

id=100\nid2=0\nid3=0\dtext='more Text' 

, и я хочу, чтобы получить только значения, например, more Text или 0 (id3).

Я пытался использовать настраиваемую функцию SPLIT, где разделитель \ n, но это возвращает меня, например, id3=0 (в этом случае мне нужно «0»).

Как я могу сделать это более эффективным?

ответ

1

Вы можете получить все значения с чем-то вроде этого:

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)|([^=]=.+?$)')) 
+0

Ничего себе, это потрясающе. Мне нужно посмотреть эти RegEx. Как избавиться от котировок, например. ''больше Text'' – frgtv10

2

и я хочу получить только значения, например. больше текста.

Просто используйте SUBSTR и Instr

SQL> WITH DATA AS 
    2 (SELECT q'[id=100\nid2=0\nid3=0\dtext='more Text']' str FROM dual 
    3 ) 
    4 SELECT SUBSTR(str,instr(str, '''')+1,LENGTH(SUBSTR(str,instr(str, '''')))-2) str 
    5 FROM DATA 
    6/

STR 
--------- 
more Text 

SQL> 
+0

Ваше решение означает, что я должен рассчитывать для каждого встречаемости чтобы получить правильный контент, не так ли? – frgtv10

+0

Но как получить контент для id3, например? – frgtv10

+0

В моем решении я рассмотрел текст между одинарными кавычками. –

Смежные вопросы