我有一个字符串列表:
这些字符串中的每一个代表5对2字符组合(即HE AW AM FW SP)
我在SQL中要做的是显示成对中具有重复的所有字符串。
从上面取第3号字符串; AW AM FW HH AW。我需要显示此记录,因为它有一个重复对(AW)。
这可能吗?
谢谢!
答案 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))