2014-09-09 3 views
0

У меня есть таблица клиентов в SQL Server. Я пытаюсь найти, чтобы найти дубликаты в столбце email_address, но мне нужно рассматривать только часть данных столбца, поэтому подстроку. На практике мне нужно найти дубликаты доменных имен в записях.SQL Server: найти дубликаты подстрок в одном столбце

Я использовал следующий запрос, чтобы найти точные дубликаты (на всем поле), но как я могу изменить это, чтобы рассмотреть подстроку?

SELECT a.email_address, b.dupeCount, a.client_id 
FROM tblClient a 
INNER JOIN (
    SELECT email_address, COUNT(*) AS dupeCount 
    FROM tblClient 
    GROUP BY email_address 
    HAVING COUNT(*) > 1 
) b ON a.email_address = b.email_address 

Большое спасибо!

+0

Как насчет вашего попробовать что-то, если вы уже подозреваете, что вам нужно использовать подстроку – Mihai

+0

только побочное замечание, поворотные может быть лучше исполнительским для данные, которые вы хотите получить. – CodeMonkey1313

+0

Попробуйте присоединиться к соответствующим подстрокам в адресе электронной почты. –

ответ

1

попробовать это:

declare @contact table (
    [client_id] [int] identity(1, 1) 
    , [email] [sysname] 
); 
insert into @contact 
     ([email]) 
values  (N'[email protected]_bobs.com'), 
     (N'[email protected]'), 
     (N'[email protected]_bobs.com'); 
with [stripper] 
as (select [client_id] 
      , [email] 
      , substring([email] 
         , charindex(N'@', [email], 0) + 1 
         , len([email])) as [domain_name] 
    from @contact), 
[duplicate_finder] 
as (select [client_id] 
      , [domain_name] 
      , row_number() 
       over (
        partition by [domain_name] 
        order by [domain_name]) as [sequence] 
    from [stripper]) 
select from [duplicate_finder] 
where [sequence] > 1; 
+0

Спасибо за ваш ответ. Я не собираюсь удалять дубликаты записей, как я могу заставить это работать без части удаления? – Adam92

+0

Адам, я обновил только выбор, чтобы отразить ваш вопрос. –

+0

Блестящий, спасибо! – Adam92

0

го:

SELECT substr(email_address, 1, 2), count(*) 
FROM tblClient 
group by 1 
+0

Как бы вы изменили этот запрос, чтобы получить все строки, связанные с этими уникальными подстроками? – zelusp

Смежные вопросы