2014-08-30 85 views
0

TableA包含许多记录,其中col1字段为前六个字符重复。在Oracle 11g中查找子串重复

col1中包含:足球和footbcuu和footbcavity

我需要找到其中前五个字符复制了所有行。

SELECT * FROM tableaA A WHERE 
rowid > 
(SELECT min(rowid) FROM tableA B 
WHERE B.substr (col1, 1, 5)= A.substr (col1, 1, 5)); 

错误与意外结束的声明,我认为它只是括号。

有人可以帮助这个语法?

谢谢!

回答

0

除了语法错误,我不明白你尝试的逻辑。

下面的查询获取其中前五个字符是重复的所有行:

select a.* 
from (select a.*, count(*) over (partition by substr(a.col1, 1, 5)) as cnt 
     from tableA a 
    ) a 
where cnt > 1 
order by a.col1; 
0

我看到一个失踪支架就在声明的末尾

SELECT * FROM tableaA A WHERE 
rowid > 
(SELECT min(rowid) FROM tableA B 
WHERE B.substr (col1, 1, 5)= A.substr (col1, 1, 6)); 
+1

您复制从OP的代码错字。五个字符的字符串永远不会等于六个字符串。 – APC 2014-08-30 22:03:39

+0

我刚刚指出编辑的语法错误 – heximal 2014-08-30 22:06:48

+0

的来源修复了错字,并且我在原始语言中有额外的括号...仍然有声明结束 – user761758 2014-08-30 22:12:02