我试图过滤项与存储过程使用like。列是varchar(15)。我试图过滤的项目名称中有方括号。

例如:WC[R]S123456。

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

我找到了一些关于使用ESCAPE关键字LIKE的信息,但我如何使用它来将方括号作为常规字符串?


当前回答

如果你需要转义像'_'(下划线)这样的特殊字符,就像我的例子一样,并且你不愿意/不能定义一个转义子句,你可能希望用方括号'['和']'把特殊字符括起来。

这解释了“奇怪的”字符串“[[]”的含义——它只是包含了“[”字符和方括号,有效地转义了它。

我的用例是指定一个存储过程的名称,其中带有下划线,作为Profiler的筛选条件。所以我把字符串'%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

如果你需要转义像'_'(下划线)这样的特殊字符,就像我的例子一样,并且你不愿意/不能定义一个转义子句,你可能希望用方括号'['和']'把特殊字符括起来。

这解释了“奇怪的”字符串“[[]”的含义——它只是包含了“[”字符和方括号,有效地转义了它。

我的用例是指定一个存储过程的名称,其中带有下划线,作为Profiler的筛选条件。所以我把字符串'%name[_]的[_]一个[_]存储的[_]过程%'在TextData LIKE字段,它给了我跟踪结果,我想实现。

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

除了键盘上的“\”或其他字符外,还可以使用键盘上没有的特殊字符。根据您的用例,这可能是必要的,如果您不希望用户输入意外被用作转义字符。

假设你想匹配字面量its[brac]et。

你不需要转义[],因为它只有在与[搭配使用时才有特殊的意义。

因此,逃跑就足以解决问题了。可以通过将[[]替换为[]来转义[。

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

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