如何在SQL中查找以相同字符串(类似行)开头的行?

时间:2010-07-20 12:33:27

标签: sql-server select duplicates substring

我有一个主键表,如下所示:

FIRSTKEY〜ABC

SECONDKEY〜DEF

FIRSTKEY〜DEF

我想编写一个SELECT语句,它会删除波浪号后面的段,并在波浪后波段消失后返回所有重复的行。也就是说,

选择......

给我:

FIRSTKEY〜ABC

FIRSTKEY〜DEF

作为“重复”。

我已经有点使用SUBSTRING来剥离结束段:

SELECT FROM SUBSTRING(COLUMN,0,CHARINDEX('〜',COLUMN))FROM TABLE

这是在SQL Server上。

2 个答案:

答案 0 :(得分:3)

试一试

SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)), COUNT(*) FROM TABLE 
GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
HAVING COUNT(*) > 1

答案 1 :(得分:0)

给出的第一个解决方案将识别关键前缀;将它扩展一点以获得以这些键开头的表行:

SELECT * 
FROM TABLE
WHERE SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) IN
(
    SELECT SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN)) FROM TABLE 
    GROUP BY SUBSTRING(COLUMN, 0, CHARINDEX('~', COLUMN))
    HAVING COUNT(*) > 1
)

或者,您可以在包含前缀的临时表和原始表之间使用连接 - 如果前缀的数量变得非常大,则使用“where in”会变得非常昂贵。