如何在LIKE子句中转义方括号?

我正在尝试使用类似的过滤存储过程的项目。 该列是一个varchar(15)。 我试图过滤的项目在名称中有方括号。

例如: WC[R]S123456

如果我做一个LIKE 'WC[R]S123456'它不会返回任何东西。

我发现一些关于在LIKE使用ESCAPE关键字的信息,但我不明白如何使用它将方括号视为常规string。

 LIKE 'WC[[]R]S123456' 

要么

 LIKE 'WC\[R]S123456' ESCAPE '\' 

应该工作。

让你想要匹配文字: its[brac]et

你不需要逃避]因为它只有在与[配对]时才有特殊的含义。

因此逃避[足以解决问题。 你可以 [[] replace它

我需要从查询中排除以下划线开头的名字,所以我最终得到了这个结果:

 WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character 

这是我实际使用的:

 like 'WC![R]S123456' ESCAPE '!' 

如果您需要search特殊字符(如%和_,通常为通配符),则使用ESCAPE关键字。 如果您指定了ESCAPE,则SQL将逐字地search字符%和_。

这里有一个很好的文章,更多的例子

 SELECT columns FROM table WHERE column LIKE '%[[]SQL Server Driver]%' -- or SELECT columns FROM table WHERE column LIKE '%\[SQL Server Driver]%' ESCAPE '\' 

键盘上的另一个字符,而不是“\”,也可以使用不在键盘上的特殊字符。 根据你的用例,这可能是必要的,如果你不希望用户input意外地被用作转义字符。

如果您需要像“_” (下划线)那样转义特殊字符(就像我的情况那样),而且您不想/不能定义ESCAPE子句,则可能希望将特殊字符用方括号“ '']'

这解释了“怪异”string“[[]”的含义 – 它只是包含方括号内的“[”字符,有效地逃避它。

我的用例是指定存储过程的名称,并在其中使用下划线作为Profiler的过滤条件。 所以我已经把[_] a [_]的string'%name [_]存储在一个TextData LIKE字段中,它给了我想要实现的跟踪结果。

下面是文档中的一个很好的例子: LIKE(Transact-SQL) – 使用通配符作为文字

据文件记载 :

您可以使用匹配字符的通配符模式作为文字字符。 要将通配符用作文字字符,请将通配符括在括号内。

你需要转义这三个字符%_[

 '5%' LIKE '5[%]' -- true '5$' LIKE '5[%]' -- false 'foo_bar' LIKE 'foo[_]bar' -- true 'foo$bar' LIKE 'foo[_]bar' -- false 'foo[bar' LIKE 'foo[[]bar' -- true 'foo]bar' LIKE 'foo]bar' -- true