我正在尝试使用类似的过滤器使用存储过程过滤项目.该列是varchar(15).我想要过滤的项目在名称中有方括号.
例如: WC[R]S123456
.
如果我这样做LIKE 'WC[R]S123456'
,它将不会返回任何东西.
我找到了一些关于使用ESCAPE
关键字的信息,LIKE
但我不明白如何使用它来将方括号视为常规字符串.
LIKE 'WC[[]R]S123456'
要么
LIKE 'WC\[R]S123456' ESCAPE '\'
应该管用.
假设你想匹配文字its[brac]et
.
你不需要逃脱]
它,因为它只有在配对时具有特殊含义[
.
因此逃避[
就足以解决问题.您可以[
通过替换它 来逃避[[]
.
我需要从查询中排除以下划线开头的名称,所以我最终得到了这个:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
这是我实际使用的:
like 'WC![R]S123456' ESCAPE '!'
如果您需要搜索%和_等特殊字符(通常是通配符),则使用ESCAPE关键字.如果指定ESCAPE,SQL将逐字搜索字符%和_.
这是一篇包含更多示例的好文章
SELECT columns FROM table WHERE column LIKE '%[[]SQL Server Driver]%' -- or SELECT columns FROM table WHERE column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
如果像我这样需要转义'_'(下划线)之类的特殊字符,并且您不愿意/无法定义ESCAPE子句,则不妨将特殊字符括在方括号'[ '和']'。
这就解释了“怪异”字符串'[[]'的含义-它只是在方括号中包含'['字符,从而有效地将其转义。
我的用例是指定带有下划线的存储过程的名称,作为Profiler的过滤条件。因此,我将字符串'%name [_] of [_] a [_] stored [_] procedure%'放入了TextData LIKE字段中,它为我提供了想要实现的跟踪结果。
这是文档中的一个很好的示例: LIKE(Transact-SQL)-使用通配符作为文字