SQL中如何在含[]值的数据中正确使用LIKE操作符?
问题分析与解决方案
你遇到的问题根源是LIKE查询中包含特殊通配符,这些字符在LIKE语法里有特殊含义,无法直接匹配字段中实际存储的字符。
原查询里的[]是LIKE的专用通配符,用于定义匹配的字符范围,直接写入LIKE条件时,数据库会将其当作通配符解析,而非实际的方括号字符。另外字符串中的\如果涉及转义逻辑,也需要额外处理才能正确匹配。
调整后的LIKE查询(分数据库适配)
针对SQL Server
方法1:使用ESCAPE子句指定转义字符
select * from Table1 where Email like '%test()<>\[\\]:;@\\@test.com%' ESCAPE '\'
- 用
\作为转义字符,将[转义为\[、]转义为\]、\自身转义为\\,确保数据库把这些字符视为字段中实际存储的内容,而非通配符或转义标识。
方法2:用方括号包裹特殊字符
select * from Table1 where Email like '%test()<>[[]]:;@\@test.com%'
- 在SQL Server的LIKE语法中,
[[]代表实际的[字符,[]]代表实际的]字符,以此直接匹配字段里的方括号。
针对MySQL
MySQL默认以\作为转义字符,无需额外指定ESCAPE子句,直接转义即可:
select * from Table1 where Email like '%test()<>\[\\]:;@\\@test.com%'
内容的提问来源于stack exchange,提问作者Amit Vasi
相关产品推荐
相关产品推荐

