SQL Server 2019含方括号列数据查询异常及解决方法
解决LIKE匹配含方括号路径时的记录丢失问题
我有两张表,每张表都包含文件夹路径列,这些列可能包含方括号(例如Folder1\Folder2\Folder3[Old]\)。用table1.path = table2.path能正常匹配所有对应记录,但用LIKE运算符查询一张表中包含另一张表部分路径的记录时,含方括号的记录会被忽略,执行的SQL如下:
select a.* from table1 a cross join table2 b where a.path like '%' + b.path + '%'
请问是否需要添加转义语法?
解决方法
是的,必须添加转义语法。因为SQL的LIKE运算符中,方括号[]属于特殊通配符(用于匹配指定范围内的单个字符),直接使用会被解析为匹配规则而非普通文本,导致含方括号的路径无法被正确识别匹配。
可以通过转义处理方括号来解决,最终可用的SQL如下:
select a.* from table1 a cross join table2 b where a.path like '%' + replace(replace(b.path, '[', '#['), ']', '#]') + '%' escape '#'
这段代码的核心逻辑:
- 用嵌套的
replace函数,将路径中的[替换为#[,]替换为#] - 通过
escape '#'声明#为转义字符,让LIKE将#[和#]解析为普通的方括号文本,而非通配符规则
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

