如何将列值与任何长度的字符串匹配?

时间:2016-10-18 23:12:55

标签: sql sql-server sql-server-2014

我有一个存储公司名称及其主页网址的表格。像这样:

CompanyName | CompanyURL
WalMart       walmart.com
eBay UK       www.ebay.co.uk
Amazon        http://www.amazon.com

有时人们会向我的应用提交一个网址,例如http://www.ebay.co.uk/amazon

我想查看CompanyURL值是否包含在用户提交的网址中。

我通常会尝试这样做:

SELECT 
 *
FROM
dbo.Company
WHERE CompanyURL LIKE '%www.ebay.co.uk/amazonstore%'

当然上面的工作不会起作用,因为字符串长于列值。我真正想要完成的是:

...
WHERE CompanyURL IS CONTAINED SOMEHWERE INSIDE 'www.ebay.co.uk/amazonstore' --- the URL provided by the user

可以在SQL Server 2014中执行此操作吗?

4 个答案:

答案 0 :(得分:1)

你可以使用CHARINDEX,这可以避免处理凌乱的%符号(在URL中有特殊含义)。

如果您希望输入是表中CompanyURL的超字符串(即,您想要查看提供的值是否包含CompanyURL),请使用:

WHERE CHARINDEX(CompanyURL, 'www.ebay.co.uk/amazonstore') != 0

如果您希望输入是表格中CompanyURL的子字符串(即,您希望查看您的任何CompanyURL值是否包含所提供的值),请使用:

WHERE CHARINDEX('www.ebay.co.uk/amazonstore', CompanyURL) != 0

如果您需要检测这两种情况,可以随时使用

WHERE CHARINDEX('www.ebay.co.uk/amazonstore', CompanyURL) != 0
OR    CHARINDEX(CompanyURL, 'www.ebay.co.uk/amazonstore') != 0

...尽管你可能会得到一些误报,这取决于你对输入和表中值的严格程度。

答案 1 :(得分:1)

Declare @YourTable table (CompanyName varchar(50),CompanyURL varchar(50))
Insert Into @YourTable values
('WalMart','walmart.com'),
('eBay UK','ebay.co.uk'),
('Amazon','http://www.amazon.com')

Select * 
 From  @YourTable 
 Where 'www.ebay.co.uk/amazonstore' like '%'+Replace(Replace(Replace(Replace(CompanyURL,'//',''),'http:',''),'https:',''),'www','')+'%'

返回

CompanyName CompanyURL
eBay UK     ebay.co.uk

现在,我建议您规范化您的CompanyURL数据。

Update YourTable set CompanyURL = Replace(Replace(Replace(Replace(CompanyURL,'//',''),'http:',''),'https:',''),'www','')

所以未来的搜索只会是

  Select * 
     From  @YourTable 
     Where 'www.ebay.co.uk/amazonstore' like '%'+CompanyURL+'%'

答案 2 :(得分:0)

你有like向后:

WHERE 'www.ebay.co.uk/amazonstore' like '%' + CompanyURL + '%'

答案 3 :(得分:0)

为什么不这样比较

SELECT *
FROM
dbo.Company
WHERE  'www.ebay.co.uk/amazonstore' LIKE '%'+ CompanyURL +'%'  OR 
        CompanyURL LIKE '%www.ebay.co.uk/amazonstore%'