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_';
相关推荐
清平乐的技术专栏3 小时前
一文读懂Kafka中的“消费”(对标MySQL数据库)
数据库·mysql·kafka
i220818 Faiz Ul3 小时前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台
IT策士3 小时前
Django 从 0 到 1 打造完整电商平台:登录与登出功能实现
数据库·django·sqlite
程序边界3 小时前
标量子查询消除与向量化:一个被低估的协同效应
数据库
zero.cyx3 小时前
软件设计师(4)数据库
数据库
.小小陈.3 小时前
MySQL 高频考点:表连接与索引全解析
数据库
阳光九叶草LXGZXJ4 小时前
达梦数据库-学习-57-读写数据页超时告警排查(page[x,x,xxxxxx] disk write uses)-DSC集群版
linux·运维·服务器·数据库·sql·学习
Omics Pro4 小时前
前沿学科:量子生物学!
大数据·数据库·人工智能·windows·redis·量子计算
霸道流氓气质4 小时前
Spring 事务提交后执行异步操作:原理、陷阱与最佳实践
数据库·spring
无小道4 小时前
Redis——list相关指令
数据库·redis·缓存