2017-04-12 9 views
-2
  1. この列には300行以上の行があります。これを検索するにはselect文で正規表現の1つを使用する必要があります。 (異なる列で)次の列ZとしてカラムY
  2. PA_T50_TOP50 & PA_SC_LE_DIVとしてカラムXOracle SQL:正規表現 - 行に固有の文字から取得する

  3. TUKB901として
  4. MisTop50RankingTop50CCP & MisScLeDivProfit

    <regel><wenn wert="MisTop50RankingTop50CCP" /><dann wert="T50" /><dann wert="TUKB901" /><dann wert="PA_T50_TOP50" /><dann wert="TUKB203" /><dann wert="T_T50_TOP50" /><dann wert="STICHTAG" /><dann wert="CCP" /><dann wert=" " /><dann wert=" " /><dann wert="1" /><dann wert=" " /><dann wert=" " /><prio wert="50"/></regel> 
    <regel><wenn wert="MisScLeDivProfit" /><dann wert="SC" /><dann wert="TUKB901" /><dann wert="PA_SC_LE_DIV" /><dann wert="TUKB201" /><dann wert="T_SC_LE_DIV" /><dann wert="STICHTAG_MANDANT_LAUF" /><dann wert=" " /><dann wert=" " /><dann wert=" " /><dann wert="1" /><dann wert=" " /><dann wert=" " /><prio wert="50"/></regel> 
    

任意のアイデアがたくさん

+0

?それは常に第二の 'dann'要素ですか?同様に、列Zは常に3番目の 'dann'要素ですか? – MT0

答えて

0
の一部となりますので、私はREGEXP_SUBSTRを使用する必要があります

より大きな選択とこれはクライアントが望むものです

本当に、do not use regular expressions to parse XMLと適切なXMLパーサーを使用してください。

あなたはすべての良識に対してに義務付けられている場合:あなたは `<ダン「=ワート」>`列Yに行くことであるかを知るにはどうすればよい

SELECT REGEXP_SUBSTR(rule, '<wenn\s+wert\s*=\s*"(.*?)"\s*/>', 1, 1, NULL, 1) AS X, 
     REGEXP_SUBSTR(rule, '<dann\s+wert\s*=\s*"(.*?)"\s*/>', 1, 2, NULL, 1) AS Y, 
     REGEXP_SUBSTR(rule, '<dann\s+wert\s*=\s*"(.*?)"\s*/>', 1, 3, NULL, 1) AS Z 
FROM your_table; 
+0

ありがとうございました!それは働いていると私のお尻の大きな時間を節約 – John

0

は、なぜあなたは正規表現を使用したいんありがとう役立つだろうか?また、XML関数を使用することもできます。各ラインと仮定すると一つのレコードを返還しなければならない、あなたは使用することができ、この1:あなたはそれがこのように見えるかもしれケースで

WITH x AS (
    SELECT XMLTYPE('<regel><wenn wert="MisTop50RankingTop50CCP" /><dann wert="T50" /><dann wert="TUKB901" /><dann wert="PA_T50_TOP50" /><dann wert="TUKB203" /><dann wert="T_T50_TOP50" /><dann wert="STICHTAG" /><dann wert="CCP" /><dann wert=" " /><dann wert=" " /><dann wert="1" /><dann wert=" " /><dann wert=" " /><prio wert="50"/></regel>') AS regel 
FROM dual) 
SELECT WENN AS X, 
    DANN_1 AS Y, 
    DANN_3 AS Z 
FROM x 
    NATURAL JOIN XMLTABLE('/regel' PASSING regel COLUMNS 
    WENN VARCHAR2(100) PATH 'wenn/@wert', 
    DANN_1 VARCHAR2(100) PATH 'dann[1]/@wert', 
    DANN_3 VARCHAR2(100) PATH 'dann[3]/@wert' 
); 


X      Y Z 
MisTop50RankingTop50CCP T50 PA_T50_TOP50 

SELECT WENN AS X, 
    DANN_1 AS Y, 
    DANN_3 AS Z 
FROM YOUR_TABLE 
    NATURAL JOIN XMLTABLE('/regel' PASSING XMLTYPE(RULE) COLUMNS 
    WENN VARCHAR2(100) PATH 'wenn/@wert', 
    DANN_1 VARCHAR2(100) PATH 'dann[1]/@wert', 
    DANN_3 VARCHAR2(100) PATH 'dann[3]/@wert' 
); 
+0

ご回答ありがとうございます – John

+0

しかし、私はREGEXP_SUBSTRを使用する必要があります。なぜなら、より大きな選択の一部であり、これはクライアントが望むものなのですからです。 – John

+0

'NATURAL JOIN'を使用しますか?' CROSS JOIN'または 'LEFT OUTER JOIN XMLTABLE(...)ON(1 = 1) '? – MT0

関連する問題