我试图在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条记录 - 这可能吗?
答案 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)