开发者

How to find rows in SQL that start with the same string (similar rows)?

I have a table with primary keys that look like this:

FIRSTKEY~ABC

SECONDKEY~DEF

FIRSTKEY~DEF

I want to write a SELECT statement that strips off the segment following the tilde and returns all rows that are duplicates after the post-tilde segment is gone. That is,

SELECT ...

Gives me:

FIRSTKEY~ABC

FIRSTKEY~DEF

As "duplicates".

I already have the bit to strip off the end segment using SUBSTRING:

SELECT SUBSTRING(COLUMN, 0, CHARINDE开发者_如何学GoX('~', COLUMN)) FROM TABLE

This is on SQL Server.


Give this a shot

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


The first solution given will identify the key prefixes; extend it just a bit to get the table rows beginning with those keys:

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
)

Alternately, you could use a join between a temp table containing the prefixes and the original table - if the number of prefixes becomes very large, using a "where in" can become very expensive.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜