2016-10-18 1 views
-1

私は会社名とそのホームページURLを格納するテーブルを持っています。これと同じように:列の値と任意の長さの文字列を照合する方法は?

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

時々、人々は私がCompanyURL値がユーザーによって提出されたURL内に含まれているかどうかを確認したい、そのようなhttp://www.ebay.co.uk/amazon

として自分のアプリケーションにURLを提出します。

私は通常、これを実行しようとするだろう:文字列が長い列の値よりもあるので

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

のように比較しないだろう、私はこの質問を閉じたいと思います。すべての可能な値を見た後、私はSQLでこれを行うことができないことを認識しました。 CompanyURLが存在するかどうかを調べる前に、文字列のドメイン部分を抽出するために、巧妙な部分文字列操作を行う必要があります。 –

答えて

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+'%' 
+0

これは私が同意する最善の方法です。私がしなければならないのは、wwwを置き換えることだけです。ただ「www」の代わりに、そうでなければ、私は先導的な期間を残すでしょう。答えとして投票 –

0

あなたは後方likeを持っている:

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

提出されたURLが単に「ebay.co.uk」の場合は動作しません –

+2

@volumeone正しくありません。 'ebay.co.uk'はINDEED LIKE '%ebay.coです。uk% ' –

+2

@volumeone私はGordonがSQLについて何かを知っていると思います。おそらく、彼に説明するように頼んで、あなたをより良くするでしょう。 – scsimon

1

あなたは(URLで特別な意味を持っている)乱雑%記号を扱う回避する、CHARINDEXを使用することができます。

あなたは(つまり、あなたは指定された値が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 

...あなたの入力とテーブルの値についてどれほど厳格であるかに応じて、いくつかの誤検出が生じることがあります。

+0

CompanyURLが提供されたURL文字列と完全に一致しない限り、動作しないようです。たとえば、CompanyURLが 'http:// www.ebay.co.uk'で、' ebay.co.uk'のURLを送信した場合、一致するものはありません。 –

+1

あなたはちょうど問題を逆転しました。しかたがない。私の答えを修正しました。 –

+0

私はこれを正しく動作させることができません。これを行うと、一致するものは返されません。SELECT * WHERE CHARINDEX( 'www.ebay.co.uk/amazonstore'、 'http://www.ebay.co.uk')!= 0 OR CHARINDEX( 'http://www.ebay.co.uk'、 'www.ebay.co.uk/amazonstore')!= 0' –

0

なぜこの

SELECT * 
FROM 
dbo.Company 
WHERE 'www.ebay.co.uk/amazonstore' LIKE '%'+ CompanyURL +'%' OR 
     CompanyURL LIKE '%www.ebay.co.uk/amazonstore%' 
関連する問題