web-dev-qa-db-ja.com

Oracle SQL:2つの文字間のテキストの抽出

次のような文字列があります

{ABCDE}{F1}
{GHIJ}{K12}

最初の中括弧の間のテキストを抽出したい

ABCDE
GHIJ

オンラインで検索してみましたが、関数またはPL-SQLを使用しているようです。誰かがこれを手伝ってくれませんか?

4
Anish

ここではREGEXP_SUBSTRを使用できます。

SELECT regexp_substr('{ABCDE}{F1}', '\{([^}]+)\}', 1,1,NULL,1) AS output
FROM dual

デモ

これは、このパターンに従って、キャプチャグループを使用するREGEXP_SUBSTRのあまり一般的ではない使用法です。

\{([^}]+)\}

6番目のパラメーターは、最初のキャプチャグループを返すことを示しています。

9
Tim Biegeleisen

これは古いskoolです。私は正規表現が大好きで、それらを理解することができますが、それらを作成しようとすると、非常に多くのトラブルに遭遇します。スペイン語に少し似ています(私にとって)。したがって、これはSQL INSTR/SUBSTR/REPLACEです。私は賛成票を期待していません...

WITH test_data (raw_text)
 AS 
  (SELECT '{ABCDE}{F1}' from dual UNION ALL
   SELECT '{GHIJ}{K12}' from dual 
  )
SELECT
 raw_text
,SUBSTR(raw_text,2,INSTR(raw_text,'}{')-2)              first_string
,REPLACE(SUBSTR(raw_text,INSTR(raw_text,'}{')+2),'}')   second_string
--these two from Tim's excellent answer
,regexp_substr(raw_text, '\{([^}]+)\}', 1,1,NULL,1) 
,regexp_substr(raw_text, '\{([^}]+)\}', 1,2,NULL,1)
FROM
 test_data
;

デモ

3

あなたは次のようなことを試すかもしれません:

SELECT TRIM( '{' FROM REGEXP_SUBSTR(mystring, '\{[^}]+') )
  FROM mytable;

これにより、最初の開始中括弧から終了中括弧までのテキストがキャプチャされ、結果から開始中括弧がトリミングされます。

お役に立てれば。

1
David Faber