2010-07-20 75 views
0

我有一个主键,看起来像这样的表:如何在SQL中查找以相同字符串(类似行)开头的行?

FIRSTKEY〜ABC

SECONDKEY〜DEF

FIRSTKEY〜DEF

我想写剥除一个SELECT语句段后面的波浪线代替,并返回后波浪线段消失后重复的所有行。也就是说,

SELECT ...

给我:

FIRSTKEY〜ABC

FIRSTKEY〜DEF

为 “重复”。

我已经有位使用SUBSTRING以剥离结束段:

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

这是SQL Server上。

+0

因此,在您的WHERE子句中使用该位来检查两个位是否相等,然后返回值? – Konerak 2010-07-20 12:38:17

回答

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”可能会变得非常昂贵。

3

这给了一枪

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

这工作,但我喜欢给我的原始行的答案。 – 2010-07-20 13:42:09

相关问题