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

Sql server 如何在SQL中查找以相同字符串(类似行)开头的行?,sql-server,select,duplicates,substring,Sql Server,Select,Duplicates,Substring,我有一个带有主键的表,如下所示: FIRSTKEY~ABC 第二键~DEF FIRSTKEY~DEF 我想写一个SELECT语句,去掉波浪线后面的线段,并在波浪线后面的线段消失后返回所有重复的行。就是 选择 给我: FIRSTKEY~ABC FIRSTKEY~DEF 作为“复制品” 我已经有了使用子字符串去除端段的位: 从表中选择子字符串(列,0,CHARINDEX(“~”,列)) 这是在SQL Server上。试一试 SELECT SUBSTRING(COLUMN, 0, CHARINDEX(

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

FIRSTKEY~ABC

第二键~DEF

FIRSTKEY~DEF

我想写一个SELECT语句,去掉波浪线后面的线段,并在波浪线后面的线段消失后返回所有重复的行。就是

选择

给我:

FIRSTKEY~ABC

FIRSTKEY~DEF

作为“复制品”

我已经有了使用子字符串去除端段的位:

从表中选择子字符串(列,0,CHARINDEX(“~”,列))

这是在SQL Server上。

试一试

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

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

给出的第一个解决方案将识别密钥前缀;稍微扩展一下,以获得以这些键开头的表行:

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

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

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

因此,在where子句中使用该位检查两个位是否相等,然后返回值?所以在WHERE子句中使用该位检查两个位是否相等,然后返回值?这是可行的,但我喜欢给出原始行的答案。这是可行的,但我喜欢给出原始行的答案。