2017-09-27 11 views
3

すべての有効なドメインのホワイトリストを持つテーブルがあります。問題の列は「URL」と呼ばれますSQLパラメータとホワイトリスト列の値の比較

URL列はVARCHAR(60)で、@urlは.Net文字列プリミティブです。

が、テーブルに格納されたホワイトリストのURLで始まるで始まるSQLパラメータを返した場合、「1」を返すSQL文が必要です。

SELECT 1 
    FROM [TABLE] 
WHERE @url LIKE (URL || '%') 

をしかし、それは仕事と次のエラーを与えていない:これは私が持っているものである

A LIKE predicate or POSSTR scalar function is not valid because the first operand is not a string expression or the second operand is not a string.

HTTP://WWW.GOOGLE.COM/ANYTHING/AFTER/THISのパラメータ値を与えられたとき、私は起こるしたいものの例私のテーブルにはHTTP://WWW.GOOGLE.COMのような行がありますが、 "1"を返しますが、ドメインで始まる行がない場合はnullを返します。

例のテーブル値:

HTTP://WWW.GOOGLE.COM 
HTTPS://WWW.ANOTHERWEBSITE.GOV 
HTTP://WWW.DOMAIN.CORP 
HTTP://MY.WEBSITE.COM 
HTTPS://STUFF/SUBDOMAIN/ 
HTTP://BUSINESS.JUNK.CORP/ 

答えて

2

方法について:

SELECT 1 
FROM table 
WHERE LEFT(URL, LENGTH(@url)) = @url; 

または

SELECT 1 
FROM table 
WHERE LOCATE(URL, @url,1) = 1; 

EDIT:

によっては

:は、上記のソリューションの組み合わせは、私の問題を解決し

、私は以下の使用SQLを投稿します:ポスターから

CAST(URL AS VARCHAR(100)) -- instead of URL 
CAST(@url AS VARCHAR(100)) -- instead of @url 

EDIT:あなたのデータ型の私は、キャストを使用することをお勧め

SELECT 1 FROM table WHERE LOCATE(URL, CAST(@url AS VARCHAR(60)), 1) = 1