Sql server 如何在SQL中查找以相同字符串(类似行)开头的行?
我有一个带有主键的表,如下所示: FIRSTKEY~ABC 第二键~DEF FIRSTKEY~DEF 我想写一个SELECT语句,去掉波浪线后面的线段,并在波浪线后面的线段消失后返回所有重复的行。就是 选择 给我: FIRSTKEY~ABC FIRSTKEY~DEF 作为“复制品” 我已经有了使用子字符串去除端段的位: 从表中选择子字符串(列,0,CHARINDEX(“~”,列)) 这是在SQL Server上。试一试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(
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子句中使用该位检查两个位是否相等,然后返回值?这是可行的,但我喜欢给出原始行的答案。这是可行的,但我喜欢给出原始行的答案。