使用 LIKE 时如何转义方括号



可能的重复项:
包含括号字符的 SQL Server LIKE

我在模式匹配方面遇到问题。我创建了两个对象说,带有代码

1)[blah1]
2)[blah2] respectively

在搜索选项卡中,假设如果我给出"[blah"作为模式,它返回所有字符串即 [blah1] 和 [blah2]

查询是

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

我想问题出在条件和特殊字符上。如果您有解决方案,请还原。有没有任何解决方案可以转义字符"["。我试图将条件更改为 N'%[[blah%'。但即便如此,它也会返回表中的所有对象。

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

但是,当您关闭括号时,情况就不同了,即

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 摆弄示例

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

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

来源:LIKE (Transact-SQL),在"使用通配符作为文字"部分下。

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

根据我的理解,符号"["在查询中没有影响。 就像您使用符号和不使用符号进行查询一样,它会显示相同的结果。

您可以在 UI 级别跳过不需要的字符。

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

两者都显示相同的结果。

最新更新