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, CHARINDEX('~', COLUMN)) FROM TABLE
This is on SQL Server.
The first solution given will identify the key prefixes; extend it just a bit to get the table rows beginning with those keys:
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.
Give this a shot