SQL 参数与白名单列值比较
SQL Parameter Compare to Whitelist Column Values
我有一个 table,其中包含所有有效域的白名单。有问题的列称为 "URL"
URL 列是 VARCHAR(60),@url 是 .Net 字符串原语。
我想要一个 SQL 声明,如果提供的 SQL 参数 以 白名单 [=39] 开头,则 return 为“1” =]s 我已经存储在我的 table 上。这是我的:
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
并且我的 table 上有一行看起来像 HTTP://WWW.GOOGLE.COM
它将 return "1",但如果没有以域开头的行,则 return null。
示例 table 值:
HTTP://WWW.GOOGLE.COM
HTTPS://WWW.ANOTHERWEBSITE.GOV
HTTP://WWW.DOMAIN.CORP
HTTP://MY.WEBSITE.COM
HTTPS://STUFF/SUBDOMAIN/
HTTP://BUSINESS.JUNK.CORP/
怎么样:
SELECT 1
FROM table
WHERE LEFT(URL, LENGTH(@url)) = @url;
或
SELECT 1
FROM table
WHERE LOCATE(URL, @url,1) = 1;
编辑:
根据你的数据类型,我建议使用 cast:
CAST(URL AS VARCHAR(100)) -- instead of URL
CAST(@url AS VARCHAR(100)) -- instead of @url
根据海报编辑:
以上解决方案的组合解决了我的问题,我将post我在下面使用的SQL:
SELECT 1
FROM table
WHERE LOCATE(URL, CAST(@url AS VARCHAR(60)), 1) = 1
我有一个 table,其中包含所有有效域的白名单。有问题的列称为 "URL"
URL 列是 VARCHAR(60),@url 是 .Net 字符串原语。
我想要一个 SQL 声明,如果提供的 SQL 参数 以 白名单 [=39] 开头,则 return 为“1” =]s 我已经存储在我的 table 上。这是我的:
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
并且我的 table 上有一行看起来像 HTTP://WWW.GOOGLE.COM
它将 return "1",但如果没有以域开头的行,则 return null。
示例 table 值:
HTTP://WWW.GOOGLE.COM
HTTPS://WWW.ANOTHERWEBSITE.GOV
HTTP://WWW.DOMAIN.CORP
HTTP://MY.WEBSITE.COM
HTTPS://STUFF/SUBDOMAIN/
HTTP://BUSINESS.JUNK.CORP/
怎么样:
SELECT 1
FROM table
WHERE LEFT(URL, LENGTH(@url)) = @url;
或
SELECT 1
FROM table
WHERE LOCATE(URL, @url,1) = 1;
编辑:
根据你的数据类型,我建议使用 cast:
CAST(URL AS VARCHAR(100)) -- instead of URL
CAST(@url AS VARCHAR(100)) -- instead of @url
根据海报编辑:
以上解决方案的组合解决了我的问题,我将post我在下面使用的SQL:
SELECT 1
FROM table
WHERE LOCATE(URL, CAST(@url AS VARCHAR(60)), 1) = 1