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

MySQL使用LIKE查询时如何仅返回匹配到的完整子串

MySQL LIKE查询返回匹配完整子串的实现方法

实现方案

方案1:MySQL 8.0及以上版本(推荐)

直接使用内置的REGEXP_SUBSTR正则提取函数,即可精准提取包含目标子串的完整单词:

SELECT 
  REGEXP_SUBSTR(`title`, '[[:alpha:]]*inno[[:alpha:]]*', 1, 1, 'i') AS matched_substr
FROM `search_index` 
WHERE `title` LIKE '%inno%';

参数说明:

  • [[:alpha:]]*inno[[:alpha:]]*:匹配所有包含inno、前后拼接任意数量字母的连续字符串,也就是完整的英文单词
  • 最后一位参数'i':表示不区分大小写,可同时匹配inno、Inno、INNO等格式
  • 如果需要严格限定单词边界(避免匹配到无意义拼接串如xxinnoxx),可以将正则替换为'[[:<:]][[:alpha:]]*inno[[:alpha:]]*[[:>:]]',[[:<:]]和[[:>:]]为MySQL内置的单词起止标识符
  • 如果单词允许包含数字,可将[[:alpha:]]替换为[[:alnum:]]

方案2:MySQL 5.x低版本适配

低版本MySQL没有内置正则提取函数,可以通过字符串定位+截取的组合逻辑实现:

SELECT 
  SUBSTRING(
    `title`,
    IF(LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`)) - LENGTH(`title`)) = 0, 1, LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`)) - LENGTH(`title`)) + 1),
    IF(LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`))) = 0, LENGTH(`title`), LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`)))) 
    - IF(LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`)) - LENGTH(`title`)) = 0, 1, LOCATE(' ', `title`, LOCATE('inno', LOWER(`title`)) - LENGTH(`title`)) + 1)
  ) AS matched_substr
FROM `search_index`
WHERE `title` LIKE '%inno%';

该方案仅适配单词以空格作为分隔符的场景,不支持标点等其他分隔符,仅建议低版本临时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:21:02