Sql server 如何在LIKE子句中转义方括号?

Sql server 如何在LIKE子句中转义方括号?,sql-server,tsql,escaping,character,sql-like,Sql Server,Tsql,Escaping,Character,Sql Like,我正在尝试使用like使用存储过程筛选项目。该列是一个varchar(15)。我试图筛选的项目名称中有方括号 例如:WC[R]S123456 如果我执行类似“WC[R]S123456”的,它将不会返回任何内容 我找到了一些关于将ESCAPE关键字与LIKE一起使用的信息,但我不知道如何使用它将方括号视为常规字符串 LIKE 'WC[[]R]S123456' 或 应该有用。以下是我实际使用的: like 'WC![R]S123456' ESCAPE '!' 如果需要搜索特殊字符,如%和_,通

我正在尝试使用like使用存储过程筛选项目。该列是一个varchar(15)。我试图筛选的项目名称中有方括号

例如:
WC[R]S123456

如果我执行类似“WC[R]S123456”的
,它将不会返回任何内容

我找到了一些关于将
ESCAPE
关键字与
LIKE
一起使用的信息,但我不知道如何使用它将方括号视为常规字符串

LIKE 'WC[[]R]S123456' 


应该有用。

以下是我实际使用的:

like 'WC![R]S123456' ESCAPE '!'

如果需要搜索特殊字符,如%和_,通常是通配符,则使用转义关键字。如果您指定转义,SQL将逐字搜索字符%和x


我需要从查询中排除以下划线开头的名称,因此我最终得出以下结论:

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

假设您希望匹配文本
及其[brac]et

您不需要转义
]
,因为只有当它与
[
配对时,它才具有特殊意义


因此,转义
[
就足以解决问题。
您可以将
[
替换为
[]

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

如果您需要转义特殊字符,如'(下划线),与我的情况一样,您不愿意/无法定义转义子句,您可能希望用方括号'[''].将特殊字符括起来

这解释了“奇怪”字符串'[]'的含义-它只包含带有方括号的'['字符,有效地对其进行转义

我的用例是指定一个带有下划线的存储过程的名称,作为探查器的筛选条件。因此,我将字符串'%name[\]of[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

以下是文档中的一个很好的示例:

根据:

您可以使用通配符模式匹配字符作为文本 字符。要将通配符用作文字字符, 将通配符括在括号中

您需要转义这三个字符
%\u[

'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

使用以下命令。

对于要按原样搜索的用户输入,请使用escape,因为它将要求以下替换所有特殊字符(下面介绍了所有SQL Server)

这里不使用单引号“”,因为它不影响like子句,因为它是字符串连接的问题

“-”&“^”&“]”替换不是必需的,因为我们正在转义“[”

然后,在SQL查询中,它应该如下所示(在参数化查询中,在上述替换之后,可以使用模式添加字符串)

搜索精确的字符串

like 'FormattedString' ESCAPE 'ð'
以字符串开始搜索

like '%FormattedString' ESCAPE 'ð'
like 'FormattedString%' ESCAPE 'ð'
like '%FormattedString%' ESCAPE 'ð'
以字符串结尾搜索

like '%FormattedString' ESCAPE 'ð'
like 'FormattedString%' ESCAPE 'ð'
like '%FormattedString%' ESCAPE 'ð'
用字符串搜索包含

like '%FormattedString' ESCAPE 'ð'
like 'FormattedString%' ESCAPE 'ð'
like '%FormattedString%' ESCAPE 'ð'

等进行其他模式匹配。但直接用户输入需要如上所述的格式。

这其中存在一个问题:

LIKE 'WC[[]R]S123456' 
以及:

两者都适用于SQL Server,但都不适用于Oracle


似乎没有ISO/IEC 9075方法来识别包含左大括号的图案。

我必须使用此版本(明确指定“转义”字符)-此处的其他答案没有为我提供正确的结果。如果要使用自定义转义字符(反斜杠确实是自定义的),则需要使用转义关键字。我也更正了答案的另一部分。如果有人不清楚为什么需要转义括号,则表示它用于匹配某个范围或集合中的单个字符。例如,使用
如“[fz]oo'
将同时匹配'foo'和'zoo'。在答案中找到这两个词的基本原理会很好。在我阅读下面Amitesh的答案之前,我并不清楚为什么第一个例子会起作用。更喜欢像'WC\[R]S123456“ESCAPE'\'
,因为它对于维护来说更具可读性。这确实很有帮助,而且是最好的答案。
[[]
确实看起来很奇怪,但从解析器的角度看它是有意义的。解析器有一个关于如何处理
[]
之间的字符的特定规则。因此,文本
是它的[brac]et
表示:“查找以下连续字符串:
its
,(对方括号应用规则:
brac
),
et
”。另一方面,
its[[[]brac]et
表示:“查找以下连续字符串:
its
,(对方括号应用规则:
[/code>),
brac]et
”。我经常使用
-在英国它仍然是一个键盘字符,但很少在知情的情况下使用:)(位于
Esc
Tab
之间的左上角)用户仍然可以提交包含不在键盘上的字母的数据。这个答案听起来像是一个避免实际解决问题的建议…