You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:34