2016-10-18 2 views
-1

회사 이름과 홈페이지 URL을 저장하는 테이블이 있습니다. 그래서 같이 : 나는 CompanyURL 값이 사용자가 제출 한 URL에 포함되어 있는지 확인하려면 같은 http://www.ebay.co.uk/amazon길이에 관계없이 열 값을 일치시키는 방법은 무엇입니까?

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

때때로 사람들이 내 응용 프로그램에 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 서버 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 고든은 SQL에 대해 두 가지를 안다고 생각합니다. 아마 그에게 당신을 더 잘 섬길 것이라고 설명 할 것을 요구할 것입니다. – scsimon

1

당신은 (A URL에서 특별한 의미를 가지고) 지저분한 % 기호를 다루는 것을 피한다 CHARINDEX을 사용할 수 있습니다.

당신이 (즉, 당신이 제공된 값이 CompanyURL 포함 된 경우보고 싶어) 테이블에 CompanyURL의 superstring을로 입력을 기대하는 경우이 사용 : 당신이 기대하는 경우

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

을 당신은 항상 할 수있는 당신이 두 조건을 감지해야하는 경우,

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

: 입력, 이것을 사용 (당신이 당신의 CompanyURL 값 중 하나가 제공된 값이 포함되어 있는지 확인하려면 IE) 테이블에 CompanyURL의 문자열을 할 수 이것을 사용하십시오

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을 제출하면 일치하는 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%' 
관련 문제