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

SQL使用LIKE '%_12_%'查询时返回非预期结果原因排查

问题根因

你遇到的匹配错误是SQL LIKE 运算符的通配符规则导致的:

  • SQL标准中,LIKE 支持两个通配符:
    • %:匹配0个及以上任意字符
    • _:匹配恰好1个任意字符
      你写的查询条件 models LIKE '%_12_%' 并没有按照预期匹配包含字面量 _12_ 的字符串,实际匹配规则是:

任意长度前缀 + 1个任意字符 + 字符串12 + 1个任意字符 + 任意长度后缀
只要符合这个规则的models值都会被命中,比如a12b、iPhone12x、x123都会被匹配到,因此返回了不属于iPhone12系列的颜色数据。

修复方案

如果需要匹配字面量的下划线_,需要对下划线进行转义,常用的转义方式如下:

MySQL环境(默认反斜杠为转义符)

直接对要识别为字面量的下划线加反斜杠转义即可:

SELECT * FROM `iphone_colors` WHERE `cat_id` = 9 AND `models` LIKE '%\_12\_%'

通用SQL标准写法(兼容所有数据库)

通过ESCAPE关键字自定义转义符,避免不同数据库转义默认规则差异的影响:

-- 这里用#作为转义符,也可以换成其他不常用的特殊字符
SELECT * FROM `iphone_colors` WHERE `cat_id` = 9 AND `models` LIKE '%#_12#_%' ESCAPE '#'

修改后查询就只会匹配models字段包含字面量_12_的记录,仅返回iPhone12系列对应的颜色数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:48:04