2017-01-04 5 views
1

Я пытаюсь проверить дублируемую ошибку в SQL Server.SQL Server: поиск дубликатов записей

Таблица Компания:

CompanyName   | Business 
    -----------------------+---------- 
    Example Company INC | Telecom 
    The Example Company | Telecom 

Я хочу, чтобы оба названия компании в двух экземплярах. используя параметры «Пример компании INC».

Когда я использую

SELECT CompanyName 
FROM COMPANY 
WHERE CompanyName LIKE '%The Example Company INC%' 

не показать никаких результатов. Запрос должен вернуть 2 записи - возможно ли это?

+0

Вы можете проверьте, как это: 'SELECT CompanyName FROM COMPAY WHERE CompanyName LIKE '% Пример компании%'' – Aruna

+0

неверно, ваше имя таблицы, я думаю, это sh ould быть КОМПАНИЕЙ. – Abbas

+0

, пожалуйста, проверьте название своей таблицы, и вы должны удалить предложение INC from Where. –

ответ

0

Разбить строку и перейти с динамическим кодированием

DECLARE @QRY VARCHAR(MAX), @DIVISIONS VARCHAR(MAX)='The Example Company INC'; 

    DECLARE @START INT=1, @END INT=LEN(@DIVISIONS) 
    , @LIKE VARCHAR(MAX)='CompanyName LIKE ''%'; 

    WHILE (@START<[email protected]) 
    BEGIN 

    SELECT @LIKE [email protected]+ CASE ASCII(SUBSTRING(@DIVISIONS, @START, 1)) 
     WHEN 32 
      THEN '%'' OR CompanyName LIKE ''%' 
     ELSE SUBSTRING(@DIVISIONS, @START, 1) 
     END 

    SET @START+=1 

    END 
    SET @LIKE = @LIKE+'%''' 

    SELECT @QRY = ' SELECT CompanyName FROM COMPANY 
    WHERE ' + @LIKE 

    PRINT @QRY 


    EXEC(@QRY) 

Другой простой способ динамического запроса:

DECLARE @QRY VARCHAR(MAX), @DIVISIONS VARCHAR(MAX)='The Example Company INC' 
,@LIKE VARCHAR(MAX)='CompanyName LIKE ''%'; 

DECLARE @END INT=LEN(@DIVISIONS) 
select @LIKE = @LIKE+ CASE ASCII(SUBSTRING(@DIVISIONS, number, 1)) 
     WHEN 32 
     THEN '%'' OR CompanyName LIKE ''%' 
ELSE SUBSTRING(@DIVISIONS, number, 1) 
END 
FROM master.dbo.spt_values 
where type='p' and number between 1 and @END 

SET @LIKE = @LIKE+'%''' 
SELECT @QRY = ' SELECT CompanyName FROM COMPANY 
WHERE ' + @LIKE 

PRINT @QRY 


EXEC(@QRY) 
+1

Спасибо, это работает. Я также пытался разбить строки. но я не так хорош в tsql. Еще раз спасибо. – Alvie

+0

Shakeer Mirza вы можете объяснить эту строку кода мне .. »CASE ASCII (SUBSTRING (@DIVISIONIONS, number, 1)) WHEN 32« Спасибо. – Alvie

+0

Его просто проверка символа Пространство или нет. 32 - значение ascii символа Space @Alvie –

1

Если это единственный случай, когда одна компания «Пример компании INC» и еще одна компания, является «Пример компании», то следующий запрос может работать

SELECT CompanyName FROM COMPANY WHERE CompanyName LIKE '%Example Company%' 

Но я думаю, что может быть много компаний с разные имена. Поэтому в этом случае, я думаю, для вас лучше всего найти сходство между двумя строками. И на основе коэффициента подобия вы можете решить, одинаковы они или нет.

Если ваш случай второй один, то это post может помочь вам

+0

Второй правильный. Мне нужно найти, если строка несколько схожа. На примере, который я дал словам «The» и «INC», строка становится уникальной. – Alvie

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