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

MySQL查询仅返回1行数据:LIKE '%on'未获取预期结果

排查LIKE '%on'仅返回1行的问题

这种情况我在日常排查里碰到过好几次,大概率是数据细节或者查询的隐性规则出了问题,咱们一步步来梳理:

  • 先排查隐形字符的坑
    很多时候肉眼看着姓氏是以'on'结尾,但实际字段后面藏着空格、制表符或者其他不可见字符,导致LIKE '%on'匹配不上。你可以先跑这个查询确认:
SELECT Surname, LEN(Surname) AS 实际长度
FROM MyDB.myTable
WHERE Surname LIKE '%on%'

对比显示的姓氏和它的实际长度,如果长度比你肉眼数的多,说明有隐形字符。解决的话可以用去空格函数预处理字段:

-- 通用版(不同数据库TRIM支持可能有差异,比如SQL Server也可以用LTRIM(RTRIM()))
SELECT * 
FROM MyDB.myTable 
WHERE TRIM(Surname) LIKE '%on'
  • 检查大小写敏感的问题
    有些数据库的排序规则是区分大小写的,比如如果有姓氏是'On'或者'ON',你的小写%on就匹配不到。可以试试强制不区分大小写的查询:
-- SQL Server 示例:指定不区分大小写的排序规则
SELECT * 
FROM MyDB.myTable 
WHERE myTable.Surname COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%on'

-- MySQL 示例:转成小写后匹配
SELECT * 
FROM MyDB.myTable 
WHERE LOWER(Surname) LIKE '%on'
  • 用字符串函数替代LIKE做验证
    有时候LIKE的通配符规则可能和你预期的不一样,试试用字符串截取函数直接判断结尾:
-- SQL Server 用RIGHT函数
SELECT * 
FROM MyDB.myTable 
WHERE RIGHT(Surname, 2) = 'on'

-- MySQL 同样支持RIGHT,或者用SUBSTRING
SELECT * 
FROM MyDB.myTable 
WHERE SUBSTRING(Surname, LENGTH(Surname)-1, 2) = 'on'
  • 确认没有隐性过滤规则
    比如有没有不小心加了其他WHERE条件?或者MyDB.myTable是不是你真正要查的那张表?有没有同名表在其他数据库里?另外也可以检查下有没有视图、触发器在偷偷过滤数据。

内容的提问来源于stack exchange,提问作者tony9099

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:29:15