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

如何在MySQL中按XXX-XX-XXX模式筛选不符合规则的记录?

解决不符合XXX-XX-XXX格式记录的筛选问题

当然可以!你之前的查询只检查了字段长度是否为10位,但没验证「XXX-XX-XXX」这种带分隔符的结构,所以没法精准筛选出真正不符合格式的记录。咱们用更精准的正则表达式来解决:

基础版:匹配任意字符的XXX-XX-XXX格式

如果你的「XXX」「XX」可以是任意字符(字母、数字、符号等),直接用指定数量的字符+分隔符的正则规则:

SELECT * FROM table WHERE `name` NOT REGEXP '^.{3}-.{2}-.{3}$';

这个正则的拆解:

  • ^:匹配字符串开头
  • .{3}:匹配任意3个字符(对应XXX部分)
  • -:匹配分隔符横杠
  • .{2}:匹配任意2个字符(对应XX部分)
  • .{3}:匹配任意3个字符(对应最后一段XXX)
  • $:匹配字符串结尾

进阶版:仅匹配数字的XXX-XX-XXX格式

如果你的字段内容应该是纯数字组成的(比如类似123-45-678这种),把.换成数字匹配规则会更严谨:

SELECT * FROM table WHERE `name` NOT REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{3}$';

这里[0-9]等价于\d,专门匹配0-9的数字,能避免把包含字母/符号的错误格式当成合法记录。

额外提示

如果字段里可能存在前后空格(比如用户输入时不小心加了空格),可以在正则前后加上\s*来忽略空格:

SELECT * FROM table WHERE `name` NOT REGEXP '^\s*.{3}-.{2}-.{3}\s*$';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:24