如果查看LIKE运算符的定义,您将看到有一个名为ESCAPE
的可选参数,其描述如下:
是放在通配符前面的字符 表明通配符应该被解释为常规 字符而不是通配符。 escape_character是一个角色 表达式没有默认值,必须只评估一个 字符。
因此,当您编写如下所示的WHERE
子句时,您告诉SQL Server引擎将感叹号视为转义字符(就像C#中的'\'
字符一样)以列出注释包括'30%'子串:
WHERE comment LIKE '%30!%%' ESCAPE '!'
现在这里让我感到困惑。已经可以通过将通配符放在方括号内来转义它们。为什么要引入ESCAPE
参数?我猜这是有原因的。
编辑:我看到几个解释ESCAPE
如何运作的答案。我知道ESCAPE
用于转义通配符,但我也知道你可以使用方括号来转义那些通配符。我只是想了解“ESCAPE方法”有什么,“方括号方法”没有。
编辑2:虽然Szymon的例子完全有效,但我觉得这不是引入ESCAPE的唯一原因。我当然可能错了,但我怀疑可能存在一些基于性能的原因,我不确定。 Szymon,你可以达到如下相同的目的:
DECLARE @TEST_STRING VARCHAR(100) = 'ddd]eee';
SELECT 'MATCHED! (Szymon)' WHERE @TEST_STRING LIKE '%[abc!]]%' ESCAPE '!';
SELECT 'MATCHED! (Altern)' WHERE @TEST_STRING LIKE '%[abc]%' OR @TEST_STRING LIKE '%]%';
作为旁注,您不需要转义结束的方括号字符。
答案 0 :(得分:3)
我想更进一步解释
此外,在双括号字符([])中,可以使用转义字符,并且可以转义插入符号(^),连字符( - )和右括号(])。
假设您要搜索包含字符a
,b
,c
或]
的任何内容。
由于括号[ ]
中包含一组字符,因此您必须转义右括号以使其成为集合中的一个:
like '%[abc!]]%' escape '!'
此外,正如评论中所指出的,使用方括号[ ]
进行转义的语法是非标准功能,而ESCAPE
则会记录。
答案 1 :(得分:1)
没有人从我读过的内容中提到这一点,但如果您还想查询包含文字' []'你被迫逃脱角色。所以,让我们说你想查询包含文字字符的字符串' abc []'。我相信你会被迫构建这样的查询:
\a
以下是该主题的另一个链接: How can I escape square brackets in a LIKE clause?
答案 2 :(得分:0)
Escape可以在字符串匹配上下文和[]上下文中转义字符。
LIKE '%[1-5!%]%' ESCAPE '!'
这将匹配'1'或'1%'或'4'或'4%',但不是6或6%