SQL查询返回全部数据而非指定匹配记录的问题求助
问题分析与修复建议
嘿,我一眼就瞅出你这问题的症结了——你写的LIKE条件里的方括号[]在SQL里是特殊通配符,不是普通字符串!
具体来说,'%[3428]%'这个条件的实际作用是:匹配任何包含3、4、2、8中任意单个字符的记录,而不是精确匹配[3428]这个完整的带括号的字符串。这就是为啥你返回了全量数据,只要行里有这几个数字中的一个就会被捞出来。
两种修复方案,选你顺手的来
方案1:用转义符处理方括号
大多数SQL数据库都支持用转义符把特殊字符转成普通字符。这里分两种写法:
- 如果你用的是SQL Server,默认可以直接用
\转义:
select * from ( Select Rec_Num, COALESCE(AppByENo6,AppByENo5,AppByENo4,AppByENo3,AppByENo2,AppByENo1) As 'ApprovedByNewTExt' FROM MyTable ) as output where ApprovedByNewTExt like '%\[3428\]%'
- 要是怕默认转义符不生效,或者用的是其他数据库(比如MySQL),可以手动指定转义符:
select * from ( Select Rec_Num, COALESCE(AppByENo6,AppByENo5,AppByENo4,AppByENo3,AppByENo2,AppByENo1) As 'ApprovedByNewTExt' FROM MyTable ) as output where ApprovedByNewTExt like '%\[3428\]%' ESCAPE '\'
方案2:双重方括号转义(仅SQL Server可用)
SQL Server有个偷懒的小技巧:把每个方括号换成两个,数据库就会把它当成普通字符解析:
select * from ( Select Rec_Num, COALESCE(AppByENo6,AppByENo5,AppByENo4,AppByENo3,AppByENo2,AppByENo1) As 'ApprovedByNewTExt' FROM MyTable ) as output where ApprovedByNewTExt like '%[[3428]]%'
改完之后,你的查询就会精准定位到包含[3428]的记录,不会再返回无关数据啦。
内容的提问来源于stack exchange,提问作者Sixthsense
相关产品推荐
相关产品推荐

