MySQL中匹配文本特殊字符%的正确查询语句咨询
如何在SQL中匹配包含'%'的行?
这是个很常见的坑——因为%是LIKE语句里的通配符,代表匹配任意长度的字符(包括空字符),所以你写的'%%%'其实等价于'%',自然会返回表中所有行啦。
下面给你几种不同数据库下的正确写法,选适合你的就行:
1. 针对特定数据库的简化写法
- MySQL/MariaDB:用反斜杠
\转义%,把它变成普通字符:SELECT * FROM TABLE WHERE VALUE LIKE '%\%%' - SQL Server/Access:用方括号
[]包裹特殊字符,标记它为普通字符:SELECT * FROM TABLE WHERE VALUE LIKE '%[%]%' - Oracle:默认支持反斜杠转义,也可以显式指定转义符:
SELECT * FROM TABLE WHERE VALUE LIKE '%\%%' ESCAPE '\'
2. 通用跨数据库写法(推荐)
如果你的代码需要兼容多种数据库,或者不想记不同数据库的规则,可以用ESCAPE关键字自定义转义符,比如用#:
SELECT * FROM TABLE WHERE VALUE LIKE '%#%%' ESCAPE '#'
这里ESCAPE '#'告诉数据库:“紧跟在#后面的那个%是普通字符,不是通配符哦”。
额外提示
如果你的列里还可能包含另一个通配符_(用来匹配单个字符),也可以用同样的方法转义,比如在MySQL里写'%\_%',或者用通用写法'%#_%' ESCAPE '#'。
内容的提问来源于stack exchange,提问作者Tanu Gupta
相关产品推荐
相关产品推荐

