SQL中搜索'_'返回全表记录问题排查求助
问题原因与解决方案
嘿,这问题我熟!你遇到的是SQL LIKE语句里通配符的坑——_在LIKE语法里是匹配任意单个字符的通配符,不是字面意义的下划线。所以你的查询Name like '_%'其实是在找所有名称开头是任意单个字符的记录,自然会返回表中几乎所有非空名称的记录啦。
解决办法
你需要把下划线转义成字面量,有几种常用方式:
1. 使用方括号包裹通配符(SQL Server、MySQL等多数数据库支持)
把变量里的_改成[_],这样SQL就会把它当成普通下划线处理:
declare @Name varchar(50)='[_]' select * FROM products WHERE Name like @Name +'%'
2. 使用ESCAPE关键字指定转义符
如果你习惯用转义字符(比如\),可以用ESCAPE声明:
declare @Name varchar(50)='\_' select * FROM products WHERE Name like @Name +'%' ESCAPE '\'
3. 动态替换通配符(适合变量可能包含多个通配符的场景)
如果你的@Name可能动态传入,还包含%这类其他通配符,可以提前替换:
declare @Name varchar(50)='_' -- 把下划线转成字面量写法,若有%也可以一起替换 set @Name = REPLACE(@Name, '_', '[_]') select * FROM products WHERE Name like @Name +'%'
这样处理后,就能精准匹配名称开头包含下划线的记录啦。
内容的提问来源于stack exchange,提问作者user819774
相关产品推荐
相关产品推荐

