SQL参数与白名单列值比较

时间:2017-09-27 14:12:19

标签: sql db2 sql-like

我有一张表格,其中包含所有有效域名的白名单。相关列称为" URL"

URL列是VARCHAR(60),@ url是.Net字符串原语。

我想要一个返回" 1"的SQL语句。如果提供的SQL参数以我存储在桌面上的白名单URL开头。这就是我所拥有的:

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

但它不起作用并发出以下错误:

  

LIKE谓词或POSSTR标量函数无效,因为第一个操作数不是字符串表达式,或者第二个操作数不是字符串。

我想要发生的一个例子是,当给出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/

1 个答案:

答案 0 :(得分:2)

怎么样:

IO_extract <- data.frame()
for (i in 4:7) {

      FL_SEG <- substr(AUDIT[i], 2, 8)
      ACC_NO <- substr(AUDIT[i], 11, 25)
      SEC_ID <- substr(AUDIT[i], 28, 35)
      DATE   <- substr(AUDIT[i], 54, 61)
      TIME   <- substr(AUDIT[i], 63, 70)
      TASK   <- substr(AUDIT[i], 72, 79)
      SCREEN <- substr(AUDIT[i], 81, 86)
      ACTION <- substr(AUDIT[i], 88, 93)
      A_NUMB <- substr(AUDIT[i], 95, 101)

output <- t(as.matrix(c(FL_SEG, ACC_NO, SEC_ID, DATE, TIME, TASK, SCREEN, ACTION, A_NUMB)))
colnames(output) <- c("FL_SEG", "ACC_NO", "SEC_ID", "DATE", "TIME", "TASK", "SCREEN", "ACTION", "A_NUMB")
IO_extract <- rbind(IO_extract, output)

}

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

修改

根据您的数据类型,我建议使用强制转换:

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

从海报编辑:

上述解决方案的组合解决了我的问题,我将发布我在下面使用的SQL:

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