0

文字列のリストがあります:

  1. HEAWAMFWSP
  2. TLHHHAFWSP
  3. あわわわわ
  4. アウアワムハ

これらの文字列はそれぞれ、2 つの文字の組み合わせの 5 つのペアを表します (つまり、HE AW AM FW SP)

私が SQL でやろうとしているのは、ペアで重複しているすべての文字列を表示することです。

上から弦番号 3 を取ります。AW AM FW HH AW. 重複ペア (AW) があるため、このレコードを表示する必要があります。

これは可能ですか?

ありがとう!

4

2 に答える 2

0

現在の要件を考えると、はい、これは実行可能です。これは、再帰的な CTE を使用するバージョン (ベンダーの特異性に合わせてテキストを調整する必要がある場合があります) で、DB2 で作成およびテストされています。文字列内にペアのインスタンスが 2 つ以上ある場合、または重複のセットが複数ある場合は、複数の行が返されることに注意してください。

WITH RECURSIVE Pair (rowid, start, pair, text) as (
                     SELECT id, 1, SUBSTR(text, 1, 2), text
                     FROM SourceTable
                     UNION ALL
                     SELECT rowid, start + 2, SUBSTR(text, start + 2, 2), text
                     FROM Pair
                     WHERE start < LENGTH(text) - 1)
SELECT Pair.rowid, Pair.pair, Pair.start, Duplicate.start, Pair.text
FROM Pair
JOIN Pair as Duplicate
ON Duplicate.rowid = Pair.rowid
AND Duplicate.pair = Pair.pair
AND Duplicate.start > Pair.start                                          
于 2012-06-07T16:13:06.983 に答える
0

これはあまり洗練されたソリューションではありませんが、機能し、重複した一致がいくつあっても行を 1 回だけ返します。部分文字列関数は SQLServer 用ですが、Oracle 用のものかどうかはわかりません。

select ID, Value
from MyTable
where (substring(Value,1,2) = substring(Value,3,4)
or substring(Value,1,2) = substring(Value,5,6)
or substring(Value,1,2) = substring(Value,7,8)
or substring(Value,1,2) = substring(Value,9,10)
or substring(Value,3,4) = substring(Value,5,6)
or substring(Value,3,4) = substring(Value,7,8)
or substring(Value,3,4) = substring(Value,9,10)
or substring(Value,5,6) = substring(Value,7,8)
or substring(Value,5,6) = substring(Value,9,10)
or substring(Value,7,8) = substring(Value,9,10))
于 2012-06-07T16:15:41.033 に答える