sql FInding包含重复字符的字符串

时间:2012-06-07 15:42:11

标签: sql oracle9i

我有一个字符串列表:

  1. HEAWAMFWSP
  2. TLHHHAFWSP
  3. AWAMFWHHAW
  4. AUAWAMHHHA
  5. 这些字符串中的每一个代表5对2字符组合(即HE AW AM FW SP)

    我在SQL中要做的是显示成对中具有重复的所有字符串。

    从上面取第3号字符串; AW AM FW HH AW。我需要显示此记录,因为它有一个重复对(AW)。

    这可能吗?

    谢谢!

2 个答案:

答案 0 :(得分:0)

鉴于目前的要求,是的,这是可行的。这是一个使用递归CTE的版本(可能需要针对供应商特性调整文本),在DB2上编写和测试。请注意,如果字符串中有一对以上的实例,或者多于一组的重复项,则会返回多行。

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                                          

答案 1 :(得分:0)

这是一个不太优雅的解决方案,但无论多少重复匹配,它只能返回行一次。 substring函数适用于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))