ana*_*lov 5 sql-server sql-like
如果查看LIKE运算符的定义,您将看到有一个名为的可选参数ESCAPE,其描述如下:
是一个放在通配符前面的字符,表示通配符应该被解释为常规字符而不是通配符.escape_character是一个没有默认值的字符表达式,必须只计算一个字符.
因此,当您编写WHERE如下所示的子句时,您告诉SQL Server引擎将感叹号视为转义字符(就像'\'C#中的字符一样)以列出包含'30%'子字符串的注释:
WHERE comment LIKE '%30!%%' ESCAPE '!'
Run Code Online (Sandbox Code Playgroud)
现在这里让我感到困惑.已经可以通过将它们放在方括号内来转义通配符.为什么要引入这个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 '%]%';
Run Code Online (Sandbox Code Playgroud)
作为旁注,您不需要转义结束方括号字符.
我认为它解释得更进一步
此外,在双括号字符 ([ ]) 内,可以使用转义字符,并且可以转义脱字号 (^)、连字符 (-) 和右括号 (])。
假设您要搜索包含字符a、b或c的任何内容]。
由于一组字符包含在方括号中[ ],因此您必须转义右括号以使其成为该组字符之一:
like '%[abc!]]%' escape '!'
Run Code Online (Sandbox Code Playgroud)
此外,正如评论中指出的,使用方括号转义的语法[ ]是一个非标准功能,但ESCAPE已记录在案。
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |