我有一个存储公司名称及其主页网址的表格。像这样:
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中执行此操作吗?
答案 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%'