SQL LIKE 语句中下划线“_”是通配符

1. 问题描述

sql语句的where条件中,使用 type like 'object_%' ,期望筛选出以"object_" 开头的数据,如 object_test, object_data 等。

但返回结果里包含了 "objectAnything"这种不含下划线"_"的数据。

2. 问题分析

这个问题很典型,是由于 _(下划线)在 SQL LIKE 语句中是通配符 导致的。

在 SQL 的 LIKE 语句中:

  • % 匹配任意数量的字符(包括零个字符)
  • _ 匹配单个任意字符

所以当写 type LIKE 'object_%' 时,实际匹配的是:

  • 以 "object" 开头
  • 后面跟任意一个字符
  • 然后再跟任意数量的字符

因此 objectAnything 被匹配到是因为:

  • object ✅ 匹配前六个字符
  • A ✅ 匹配 _(任意单个字符)
  • nything ✅ 匹配 %(剩余所有字符)

3. 解决方案

如果想匹配字面意义上的下划线 _,需要使用 转义字符.

方法1:使用 ESCAPE 子句(推荐)

sql 复制代码
-- 使用反斜杠作为转义字符
SELECT * FROM your_table WHERE type LIKE 'object\_%' ESCAPE '\';

-- 或者使用其他转义字符,比如 !
SELECT * FROM your_table WHERE type LIKE 'object!_%' ESCAPE '!';

方法2:使用方括号(SQL Server 特有)

sql 复制代码
-- SQL Server 中可以将通配符放在方括号中
SELECT * FROM your_table WHERE type LIKE 'object[_]%';

方法3:使用等号精确匹配前缀(如果适用)

sql 复制代码
SELECT * FROM your_table WHERE LEFT(type, 7) = 'object_';
相关推荐
DarkAthena17 小时前
【GaussDB】执行索引跳扫时如果遇到该索引正在执行autovacuum,可能会导致数据查询不到
数据库·gaussdb
短剑重铸之日17 小时前
《7天学会Redis》Day 5 - Redis Cluster集群架构
数据库·redis·后端·缓存·架构·cluster
007php00717 小时前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
lkbhua莱克瓦2417 小时前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
老邓计算机毕设18 小时前
SSM心理健康系统84459(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·心理健康系统·在线咨询
碎像18 小时前
10分钟搞定 MySQL 通过Binlog 数据备份和恢复
数据库·mysql
+VX:Fegn089518 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
win x19 小时前
Redis 分布式锁
数据库·redis·分布式
2501_9445210019 小时前
rn_for_openharmony商城项目app实战-商品评价实现
javascript·数据库·react native·react.js·ecmascript·harmonyos