使用LIKE时如何逃避方括号?

时间:2012-11-30 04:49:44

标签: sql sql-server pattern-matching

  

可能重复:
  SQL Server LIKE containing bracket characters

我遇到模式匹配问题。我创建了两个对象,例如代码

1)[blah1]
2)[blah2] respectively

在搜索标签中,假设我将“[blah”作为模式,它返回所有字符串 即,[blah1]和[blah2]

查询

select *
from table1 
where code like N'%[blah%'

我猜问题是条件和特殊字符。如果您有解决方案,请恢复。有没有解决方案,我们可以逃脱字符“[”。我试图将条件更改为N'%[[blah%'。但即使这样它也会返回表中的所有对象。

3 个答案:

答案 0 :(得分:4)

如果不关闭方括号,则不会指定结果。

但是,当你关闭括号时,情况会有所不同,即

select *
from table1 
where code like N'%[blah%]%'

在这种情况下,它变为(any) + any of ('b','l','a','h','%') + (any)的匹配项。对于SQL Server,您可以使用ESCAPE子句转义字符。

select * from table1 where code like N'%\[blah%\]%' escape '\'

SQL Fiddle with examples

答案 1 :(得分:2)

您可以通过以下方式转义文字括号字符:

select *
from table1 
where code like N'%[[]blah%'

来源:LIKE (Transact-SQL),在“使用通配符作为文字”一节下。

我想这是微软保持一致的方式,因为它们也使用括号来分隔表格和列标识符。但括号的使用不是标准的SQL。就此而言,在LIKE模式中作为元字符的括号也不是标准SQL,因此在其他品牌的数据库中根本没有必要将其转义。

答案 2 :(得分:-2)

根据我的理解,符号'[',查询中没有效果。就像你用符号查询而没有符号一样,它会显示相同的结果。

您可以在UI级别跳过不需要的角色。

      select * from table1 where code like '%[blah%' 
  select * from table1 where code like '%blah%'

两者都显示相同的结果。