SQL Server: поиск дубликатов на основе первых нескольких символов в столбце

Я хочу найти дубликаты по первым трем символам фамилии, есть ли способ сделать это на SQL? Я могу сравнить все имя, но как нам сравнить первые несколько символов?

Ниже мои таблицы

  custid  forename  surname dateofbirth
----------------------------------------
    1       David   John    16-09-1985
    2       David   Jon     16-09-1985
    3       Sarah   Smith   10-08-2015
    4       Peter   Proca   11-06-2011
    5       Peter   Proka   11-06-2011

Это мой запрос, который я сейчас запускаю для сравнения

SELECT
    y.id, y.forename, y.surname
FROM 
    customers y
INNER JOIN 
    (SELECT
         forename, surname, COUNT(*) AS CountOf
     FROM customers
     GROUP BY forename, surname
     HAVING COUNT(*) > 1) dt ON y.forename = dt.forename
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
200
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать left():

select c.*
from (select c.*, count(*) over (partition by left(surname, 3)) as cnt
      from customers c
     ) c
order by surname;

Вы также можете включить forename в partition by, если вы имеете в виду forename и первые три буквы фамилии.

Ответ принят как подходящий

Вы можете использовать существует следующим образом:

select t.* from t
 Where exists 
      (select 1 from t tt
        Where left(t.surname, 3) =  left(tt.surname, 3) and t.custid <> tt.custid
      ) 
order by t.surname;

Другие вопросы по теме