2017-11-23 18 views
-2

は私が順序に関係なく、私は列Bに存在する列Aの値を比較する問題を抱えているExpresiones Regulares Oracle 11gの

例:

Column A 177       Column B 177 
Column A 2 : 3 : 1 : 18 : 123 : 170 Column B 18 : 123 : 3 : 2 : 3 : 1 : 1 
Column A 2 : 3 : 177 : 123    Column B 3 : 123 : 2 : 177 
Column A 2 : 3 : 1 : 123 : 177   Column B 1 : 123 : 2 : 3 : 3 : 1 
Column A 172       Column B 1 
Column A 2 : 3 : 1 : 18 : 123 : 177 Column B 3 : 1 : 18 : 123 : 3 : 2 : 1 

我々値170は 第登録存在しないので、最初のレコードOK 第二のレコードが、NO、OK、順序は、列Aと同じではないが、しかし、値は

4番目のレコード、無があることが確認でき第5番レコード、いいえ 第6の抵抗器いいえ

ありがとう、助けの友達のために!

私はOragle 11gを使用しています。

答えて

0

SQLで文字列から表への機能を実現しようとしています。

説明したように、hereは、以下のスニペットが適切なスタートです。区切り文字を,の代わりに:に変更し、次にグループ内の列の値を比較するためにDENSE RANKを含めることで、以下を拡張することができます。文字列を複数の行に分割すると、簡単に比較できます。したがって、C1 = C2のような直接チェックの代わりにDENSE RANKの値を含めるとこれを釘付けにすることができます。

私は、フィドルやテストのためにOracleインスタンスにアクセスすることはできません。また、sqlfiddle.comさえも今までに壊れています。しかし、このポインタは何らかの方法であなたを助けるはずです。私が含まれているリンクには、この機能のための複数の選択肢が含まれています。

SQL> SELECT str 
    2 ,  REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) AS single_element 
    3 ,  LEVEL         AS element_no 
    4 FROM (
    5   SELECT ROWNUM AS id 
    6   ,  str 
    7   FROM t 
    8  ) 
    9 CONNECT BY INSTR(str, ',', 1, LEVEL-1) > 0 
10   AND id = PRIOR id 
11   AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL; 

STR       SINGLE_ELEMENT     ELEMENT_NO 
------------------------------ ------------------------------ ---------- 
X,Y,Z       X          1 
X,Y,Z       Y          2 
X,Y,Z       Z          3 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG XXX          1 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG Y          2 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG ZZ          3 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG AAAAA         4 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG B          5 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG CCC          6 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG D          7 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG E          8 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG F          9 
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG GGG         10