摘自:http://www.sqlstudy.com/sql_article.php?id=2008061601
%:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围
| Symbol | Meaning |
|---|---|
| like \'5[%]\' | 5% |
| like \'[_]n\' | _n |
| like \'[a-cdf]\' | a, b, c, d, or f |
| like \'[-acdf]\' | -, a, c, d, or f |
| like \'[[]\' | [ |
| like \']\' | ] |
| like \'abc[_]d%\' | abc_d and abc_de |
| like \'abc[def]\' | abcd, abce, and abcf |
| like \'[^1-9]\' | 0 |
| like \'[^1-9b-z]\' | 0, a |
对于字符串中出现的特殊字符:\'%\',\'[\',\'[]\', \'_\' 可以使用 \'[]\' 把它们包含起来, 这样在匹配模式(pattern)中,它们就被当作普通字符对待了。
1. 用 like \'[[]\' 匹配特殊字符 \'[\'
select 1 where \'[ABCDE\' like \'[[]%\'
2. 用 like \']\' 匹配特殊字符 \']\'
select 1 where \']ABCDE\' like \']%\'
3. 用 like \'[[]]\' 匹配特殊字符 \'[]\'
select 1 where \'[]ABCDE\' like \'[[]]%%\'
4. 用 like \'[_]\' 匹配特殊字符 \'_\'
select 1 where \'_ABCDE\' like \'[_]%\'
5. 用 like \'[%]\' 匹配特殊字符 \'%\'
select 1 where \'ABC%DE\' like \'ABC[%]DE\'
对于其他的特殊字符:\'^\', \'-\', \']\' 因为它们本身在包含在 \'[]\' 中使用,所以需要用另外的方式来转义,于是就引入了 like 中的 escape 子句,另外值得注意的是:escape 可以转义所有的特殊字符。
select 1 where \'^ABCDE\' like \'!^ABCDE\' escape \'!\' select 1 where \'-ABCDE\' like \'!-ABCDE\' escape \'!\' select 1 where \']ABCDE\' like \'!]ABCDE\' escape \'!\' select 1 where \'%ABCDE\' like \'\%ABCDE\' escape \'\\' select 1 where \'%ABCDE\' like \'!%ABCDE\' escape \'!\' select 1 where \'%ABCDE\' like \'#%ABCDE\' escape \'#\' select 1 where \'%ABCDE\' like \'@%ABCDE\' escape \'@\' select 1 where \'[ABCDE\' like \'![ABCDE\' escape \'!\' select 1 where \']ABCDE\' like \'!]ABCDE\' escape \'!\'
看出规律了吧,就是用 escape 后面紧跟着的字符来做转义字符。 escape 后面的字符相当于 C 语言字符串中的转义字符 \'\\'。
最后,看一个更加复杂的匹配
select 1 where \'[^A-Z]ABCDE\' like \'\[\^A\-Z\]%\' escape \'\\'