SQL - 选择最长的子字符串

时间:2015-02-20 00:15:47

标签: sql oracle

我有这样的数据。

AB
ABC
ABCD
ABCDE
EF
EFG    
IJ
IJK
IJKL

我只想得到ABCDE,EFG,IJKL。我怎么能这样做oracle sql?

char的大小为min 2但不具有固定长度,可以是2到100.

2 个答案:

答案 0 :(得分:3)

如果您的意思是“每个字符串序列最长的字符串”,答案会有所不同 - 您不能保证所有字符串的长度都为4.相反,您希望找到添加字符串的字符串字母不是另一个字符串。

select t.str
from table t
where not exists (select 1
                  from table t2
                  where substr(t2.str, 1, length(t.str)) = t.str and
                        length(t2.str) = length(t.str) + 1
                 );

请注意,如果您的行数适中,则此查询的效果不会很好。

答案 1 :(得分:1)

选择字符串不是任何其他行的子字符串的所有行。目前尚不清楚这是否是你想要的。

select t.str
from table t
where not exists (
    select 1
    from table t2
    where instr(t1.str, t2.str) > 0
);