2

2 つの列の値を比較する必要があるテーブルがあります。

Col1      Col2        Col3
------------------------------------
1         sssXYZ2121  XYZ   

現在、一致は単語間の完全な一致ではない場合があります。

試合の例

Col2    Col3
-----   --------------------
XYZ     XYZ                  (word to word match)
XYZ     xyz                  (can be case insensitive)
XYZ     gxyzf                (need to search within a string )
XYZ     xyzjjjjjjjjj         (need to search within a string )
XYZ     gggggXYZ             (need to search within a string )
XYZ     Xavier Yellow Zebra  (Match the full form of the abbreviation)

ここで、 の値がCol3一致しないすべての行を見つける必要がありますCol2。Oracle 10g を使用しています。

4

3 に答える 3

2

XYZ、XYZ (ワード トゥ ワード マッチ)

col2 = col3

XYZ、xyz (大文字と小文字を区別しない)

upper(col2) = upper(col3)

XYZ、gxyzf (文字列内で検索する必要があります)

upper(col2) like '%'||upper(col3)||'%'

XYZ、xyzjjjjjjjjj (文字列内で検索する必要があります)

upper(col2) like upper(col3)||'%'

XYZ、gggggXYZ (文字列内で検索する必要があります)

upper(col2) like '%'||upper(col3)

XYZ、Xavier Yellow Zebra (略語の完全な形に一致)

別のテーブルで調べる

于 2012-12-07T21:44:37.123 に答える
0

おそらく、このようなものがあなたのために働くでしょう。where句には2つの条件があり、そのうちの1つだけを満たす必要があります。最初の条件は、大文字と小文字を区別せずに、Col2内でCol3値が見つかった場合に満たされます。2番目の条件は、Col2がCol3の拡張バージョンである場合に満たされます。

SELECT Col1, Col2, Col3 FROM Tbl1
LEFT JOIN Abbr ON Col3 = Abbr.Key
WHERE INSTR(UPPER(Col2), UPPER(Col3)) > 0 OR Col2 = Abbr.ExpandedName

必要に応じて、2番目の条件を変更して、最初の条件がどのように機能するかに従うことで、Col2に拡張名ではなく拡張名を含めることができます。

于 2012-12-07T21:46:52.823 に答える