2017-01-04 3 views
1

SQL Server에서 중복 된 bame을 확인하려고합니다.SQL Server : 중복 레코드 검색

회사는 :

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

나는 중복으로 회사 이름의 양을 얻을합니다. "The Example Company INC"매개 변수를 사용하여 내가

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

를 사용하는 경우

그것은 어떤 결과를 표시하지 않습니다. 쿼리는 2 개의 레코드를 반환해야합니다 - 이것이 가능합니까? 이 한 회사가 '예 회사 INC'이며, 다른 회사가 '예 회사의 유일한 경우라면

+0

당신은 할 수 있습니다 이 같은 확인'선택 회사 이름 FROM COMPAY WHERE CompanyName LIKE '% Example Company %' ' – Aruna

+0

테이블 이름이 잘못되었습니다. 회사가 되십시오. – Abbas

+0

테이블 이름을 확인하고 Where 절에서 INC를 제거해야합니다. –

답변

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 (DIVISIONS, number, 1)) 32"감사합니다. – Alvie

+0

그냥 문자를 확인하는 것은 공간인지 여부입니다. 32는 공백 문자 @Alvie의 아스키 값입니다 –

1

다음 쿼리는

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

사용할 수 있습니다하지만 난 많은 회사가 될 수 있다고 생각 다른 이름. 이 경우 두 문자열 간의 유사성을 찾는 것이 가장 좋습니다. 그리고 유사성 요소의 기초 위에서 당신은 그들이 동일하거나 아닌지를 결정할 수 있습니다.

귀하의 경우는 두 번째 다음이 post 문자열 당신에게

+0

두 번째 매개 변수가 정확합니다. 문자열이 다소 비슷한 지 알아볼 필요가 있습니다. 예를 들어, "The"와 "INC"라는 단어는 문자열을 고유하게 만듭니다. – Alvie