SQL Server:搜索重复记录

时间:2017-01-04 04:46:28

标签: sql sql-server tsql

我试图在SQL Server中检查重复的bame。

公司

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

我希望将两个公司名称都重复。使用参数"示例公司INC"。

当我使用

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

它没有显示任何结果。查询必须返回2条记录 - 这可能吗?

2 个答案:

答案 0 :(得分:1)

如果这是唯一一家公司是'Example Company INC'而另一家公司是'The Example Company'的情况,那么以下查询可以正常工作

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

但我认为可能有许多公司名称不同。所以在这种情况下,我认为最好是找到两个字符串之间的相似性。在相似因子的基础上,您可以决定它们是否相同。

如果您的案例是第二个,那么此post可以帮助您

答案 1 :(得分: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<=@END)
    BEGIN

    SELECT @LIKE =@LIKE+  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)