Answers:
LIKE 'WC[[]R]S123456'
要么
LIKE 'WC\[R]S123456' ESCAPE '\'
应该管用。
LIKE 'WC\[R]S123456' ESCAPE '\'
因为它对于维护更具可读性。
我需要从查询中排除以下划线开头的名称,因此我得出了以下结论:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
如果需要搜索特殊字符(例如%和_,通常是通配符),则使用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)-使用通配符作为文字
除了键盘上的'\'或其他字符外,您还可以使用键盘上没有的特殊字符。如果您不希望用户输入意外地用作转义字符,则可能需要根据您的用例进行此操作。
¬
-在英国,它仍然是键盘字符,但很少有意使用:)(介于Esc
和Tab
)
使用跟随。
为了使用户输入能够按原样搜索,请使用转义,因为它将需要以下所有特殊字符的替换(下面涵盖了所有SQL Server)。
这里不使用单引号“'”,因为它不会影响like子句,因为这是字符串连接的问题。
由于我们要转义“ [”,因此不需要“-”和“ ^”和“]”替换。
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
然后,在SQL Query中应如下所示。(在参数化查询中,可以在上述替换之后在字符串中添加模式)。
搜索确切的字符串。
like 'FormattedString' ESCAPE 'ð'
搜索以字符串开头
like '%FormattedString' ESCAPE 'ð'
搜索以字符串结尾
like 'FormattedString%' ESCAPE 'ð'
搜索包含字符串
like '%FormattedString%' ESCAPE 'ð'
以便进行其他模式匹配。但是直接用户输入需要如上所述设置格式。
同时存在一个问题:
LIKE 'WC[[]R]S123456'
和:
LIKE 'WC\[R]S123456' ESCAPE '\'
两者都适用于SQL Server,但都不适用于Oracle。
似乎没有ISO / IEC 9075方法来识别涉及左括号的模式。