我正在尝试使用 like 过滤带有存储过程的项目。该列是 varchar(15)。我要过滤的项目名称中有方括号。
例如: WC[R]S123456
。
如果我这样做,LIKE 'WC[R]S123456'
它不会返回任何东西。
我找到了一些关于使用ESCAPE
关键字 with的信息,LIKE
但我不明白如何使用它来将方括号视为常规字符串。
我正在尝试使用 like 过滤带有存储过程的项目。该列是 varchar(15)。我要过滤的项目名称中有方括号。
例如: WC[R]S123456
。
如果我这样做,LIKE 'WC[R]S123456'
它不会返回任何东西。
我找到了一些关于使用ESCAPE
关键字 with的信息,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) - Using Wildcard Characters As Literals
根据文件:
您可以将通配符模式匹配字符用作文字字符。要将通配符用作文字字符,请将通配符括在方括号中。
您需要转义这三个字符%_[
:
'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
除了键盘上的“\”或其他字符,您还可以使用键盘上没有的特殊字符。根据您的用例,如果您不希望用户输入意外用作转义字符,这可能是必要的。
有一个问题,而:
LIKE 'WC[[]R]S123456'
和:
LIKE 'WC\[R]S123456' ESCAPE '\'
两者都适用于 SQL Server,但都不适用于 Oracle。
似乎没有 ISO/IEC 9075 方法来识别涉及左大括号的模式。
使用跟随。
对于要按原样搜索的用户输入,请使用转义,因为它需要以下替换所有特殊字符(以下涵盖所有 SQL Server)。
这里不采用单引号“'”,因为它不会影响like子句,因为它是字符串连接的问题。
不需要“-”和“^”和“]”替换,因为我们正在转义“[”。
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
然后,在 SQL Query 中应该如下所示。(在参数化查询中,字符串可以在上述替换后添加模式)。
搜索确切的字符串。
like 'FormattedString' ESCAPE 'ð'
从字符串开始搜索
like '%FormattedString' ESCAPE 'ð'
以字符串结尾搜索
like 'FormattedString%' ESCAPE 'ð'
用字符串搜索包含
like '%FormattedString%' ESCAPE 'ð'
等等其他模式匹配。但是直接用户输入需要如上所述格式化。