4

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

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

1)[blah1]
2)[blah2] respectively

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

查询是

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

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

4

3 回答 3

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

于 2012-11-30T04:55:34.220 回答
2

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

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

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

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

于 2012-11-30T17:08:15.310 回答
-2

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

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

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

两者都显示相同的结果。

于 2012-11-30T05:05:16.920 回答