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

为何MariaDB中NOT LIKE查询返回不符合预期的结果?

问题原因与解决方案

你的问题核心是MariaDB(及MySQL)的LIKE语法不支持[0-9]或[a-zA-Z]这类字符范围匹配——这种方括号的写法是SQL Server等数据库的专属语法,在MariaDB里,它会把[0-9]当成普通字符串字面量处理。所以你写的NOT LIKE '%[0-9]%'只会排除包含[0-9]这个具体子串的记录,而纯数字的5601、52000987里根本没有这个子串,自然不会被排除,最终返回了除whouse外的所有记录。

要实现「排除纯数字location,保留含字符(可带数字)的记录」的需求,你需要用MariaDB支持的正则表达式匹配(REGEXP或RLIKE关键字等价),以下是两种常用有效写法:

写法一:排除全数字记录

用正则^[0-9]+$表示「从开头到结尾全是1个或多个数字」,加上NOT直接排除这类记录:

SELECT *, 
  SUM(quantity) OVER (PARTITION BY partName) AS pCount 
FROM activepartslist 
INNER JOIN masterpartslist 
  ON activepartslist.mpID = masterpartslist.mpID 
WHERE location != 'whouse' 
  AND NOT location REGEXP '^[0-9]+$' 
ORDER BY partName, serialNumber;

写法二:匹配含非数字字符的记录

用正则[^0-9]表示「任意一个非数字字符」,只要location里存在这类字符,就符合你要保留的条件(比如Pinpad-7里的-和字母、Refrigerator里的字母):

SELECT *, 
  SUM(quantity) OVER (PARTITION BY partName) AS pCount 
FROM activepartslist 
INNER JOIN masterpartslist 
  ON activepartslist.mpID = masterpartslist.mpID 
WHERE location != 'whouse' 
  AND location REGEXP '[^0-9]' 
ORDER BY partName, serialNumber;

两种写法效果一致,按需选择即可。

内容的提问来源于stack exchange,提问作者I.Tornquist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:12:36