我试图过滤项与存储过程使用like。列是varchar(15)。我试图过滤的项目名称中有方括号。
例如:WC[R]S123456。
如果我做一个LIKE 'WC[R]S123456',它不会返回任何东西。
我找到了一些关于使用ESCAPE关键字LIKE的信息,但我如何使用它来将方括号作为常规字符串?
我试图过滤项与存储过程使用like。列是varchar(15)。我试图过滤的项目名称中有方括号。
例如:WC[R]S123456。
如果我做一个LIKE 'WC[R]S123456',它不会返回任何东西。
我找到了一些关于使用ESCAPE关键字LIKE的信息,但我如何使用它来将方括号作为常规字符串?
当前回答
除了键盘上的“\”或其他字符外,还可以使用键盘上没有的特殊字符。根据您的用例,这可能是必要的,如果您不希望用户输入意外被用作转义字符。
其他回答
LIKE 'WC[[]R]S123456'
or
LIKE 'WC\[R]S123456' ESCAPE '\'
应该工作。
下面是我实际使用的:
like 'WC![R]S123456' ESCAPE '!'
这段时间有个问题
LIKE 'WC[[]R]S123456'
and
LIKE 'WC\[R]S123456' ESCAPE '\'
都为SQL Server工作,都不为Oracle工作。
似乎没有任何ISO/IEC 9075方法来识别涉及左括号的模式。
如果需要搜索特殊字符,如%和_,则使用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 '\'
使用下面的方法。
对于要搜索的用户输入,使用转义,因为它将要求对所有特殊字符进行以下替换(下面涵盖了所有SQL Server)。
在这里,一个单引号“'”不被采用,因为它不影响like子句,因为它是一个字符串连接的问题。
“-”&“^”&“]”替换不需要,因为我们正在转义“[”。
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
然后,在SQL查询中,它应该如下所示。(在参数化查询中,字符串可以在上述替换后添加模式)。
搜索一个精确的字符串。
like 'FormattedString' ESCAPE 'ð'
从字符串开始搜索:
like '%FormattedString' ESCAPE 'ð'
搜索以字符串结尾:
like 'FormattedString%' ESCAPE 'ð'
用字符串搜索包含:
like '%FormattedString%' ESCAPE 'ð'
等等,用于其他模式匹配。但是直接的用户输入需要如上所述进行格式化。