Как получить первую строку после символа Oracle SQL - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить первую строку после символа. Пример:

ABCDEF||GHJ||WERT 

Мне нужно только

GHJ

Я пытался использовать REGEXP, но не смог.

Кто-нибудь может мне помочь?

Спасибо

Ответы [ 4 ]

2 голосов
/ 06 августа 2020

Я думаю, что наиболее общее решение:

WITH tbl(str) AS (
      SELECT 'ABCDEF||GHJ||WERT' str FROM dual UNION ALL
      SELECT 'ABC|DEF||GHJ||WERT' str FROM dual UNION ALL
      SELECT 'ABClDEF||GHJ||WERT' str FROM dual 
    )
SELECT regexp_replace(str, '^.*\|\|(.*)\|\|.*', '\1')
FROM tbl;

Обратите внимание, что это работает, даже если отдельные элементы содержат знаки препинания или одну вертикальную черту, чего нет в других решениях. Здесь - сравнение.

Предположительно, двойная вертикальная полоса используется для максимальной гибкости.

2 голосов
/ 06 августа 2020

Несколько проще:

SQL> select regexp_substr('ABCDEF||GHJ||WERT', '\w+', 1, 2) result from dual;
                                                         ^
RES                                                      |
---                                               give me the 2nd "word"
GHJ

SQL>

, которое читается как: дайте мне второе слово из этой строки. Не будет работать должным образом, если GHJ состоит из нескольких слов (но это не то, что предлагает ваш пример).

2 голосов
/ 06 августа 2020

Что-то вроде того, что я интерпретирую с разделителем на месте. В данном случае это || или |, пример - oracle база данных

-- pattern -- > [^] represents non-matching character and + for says one or more character followed by ||
-- 3rd parameter --> starting position
-- 4th parameter --> nth occurrence
WITH tbl(str) AS
 (SELECT 'ABCDEF||GHJ||WERT' str FROM dual)
SELECT regexp_substr(str
                    ,'[^||]+'
                    ,1
                    ,2) output
FROM   tbl;
1 голос
/ 06 августа 2020

Вы должны использовать regexp_substr function

select regexp_substr('ABCDEF||GHJ||WERT ', '\|{2}([^|]+)', 1, 1, 'i', 1) str
from dual;

STR
---
GHJ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...