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

如何实现MySQL反向LIKE查询?匹配搜索字符串包含字段值

解决「搜索字符串包含字段值」的SQL匹配问题

嘿,你遇到的问题本质是把LIKE的匹配逻辑给反过来啦!原来的SELECT * FROM books WHERE titles LIKE 'Harry Potter%'是在找字段值以搜索字符串开头的记录,但你要的是搜索字符串包含字段值——也就是判断固定的'Harry Potter'里有没有包含titles字段的内容,对吧?

下面给你两种靠谱的解决方法:

方法1:反向使用LIKE匹配

直接把匹配的两边调换位置,用CONCAT给titles字段前后加上通配符%,然后让固定搜索字符串去匹配这个模式:

SELECT * FROM books 
WHERE 'Harry Potter' LIKE CONCAT('%', titles, '%');

这个语句会精准检查'Harry Potter'是否包含titles的内容:

  • 第1行Harry Potter:完全匹配,会被返回
  • 第2行Harry:'Harry Potter'里包含Harry,会被返回
  • 第3行Harry Po:'Harry Potter'里包含Harry Po,会被返回
  • 第4行Mario Potter:'Harry Potter'里没有Mario Potter,不会返回
  • 第5行Hanry Plotter:完全不匹配,不会返回
    完美符合你的需求!

方法2:使用字符串定位函数(分数据库)

不同数据库提供了专门的函数来判断一个字符串是否包含另一个,只要函数返回的位置大于0,就说明存在包含关系:

  • MySQL/MariaDB:使用LOCATE函数
    SELECT * FROM books 
    WHERE LOCATE(titles, 'Harry Potter') > 0;
    
  • PostgreSQL:使用POSITION或STRPOS函数
    -- 方式1:POSITION
    SELECT * FROM books 
    WHERE POSITION(titles IN 'Harry Potter') > 0;
    
    -- 方式2:STRPOS
    SELECT * FROM books 
    WHERE STRPOS('Harry Potter', titles) > 0;
    
  • SQL Server:使用CHARINDEX函数
    SELECT * FROM books 
    WHERE CHARINDEX(titles, 'Harry Potter') > 0;
    

这类函数的性能通常比反向LIKE更好,尤其是在数据量较大的场景下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:13