如何在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