You need to enable JavaScript to run this app. MySQL查询排除特定字符串组合的语法示例咨询
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询排除特定字符串组合的语法示例咨询

MySQL排除重复前后缀拼接字符串实现方案

以下实现针对单个短横线分隔、前后两段字符串完全相同的字段值(比如Finance-Finance、Admin-Admin这类)的排除需求,分两种常用实现:

方案1:字符串函数拆分对比(兼容所有MySQL版本)

核心逻辑是拆分分隔符前后的内容做等值判断,不需要依赖正则支持,兼容性最高:

-- 示例表名:org_data,过滤字段:dept_tag
SELECT * 
FROM org_data
WHERE 
  -- 可选校验:仅保留包含且仅包含1个短横线的值,可根据业务需求删除该条件
  LENGTH(dept_tag) - LENGTH(REPLACE(dept_tag, '-', '')) = 1
  AND 
  -- 对比短横线前后两段内容,不相等的才返回(即排除前后一致的无效值)
  SUBSTRING_INDEX(dept_tag, '-', 1) != SUBSTRING_INDEX(dept_tag, '-', -1);

参数调整说明:

  • 把org_data替换为实际表名,dept_tag替换为要过滤的字段名
  • 如果分隔符不是短横线,将语句中所有'-'替换为实际分隔符即可
  • 如果要同时忽略大小写差异,将两个拆分函数的返回值用LOWER()包起来再对比即可

方案2:正则匹配(适用MySQL 8.0及以上版本)

用反向引用正则直接匹配规则,写法更简洁:

SELECT *
FROM org_data
WHERE dept_tag NOT REGEXP '([^-]+)-\\1';

正则规则说明:

  • ([^-]+):捕获组,匹配所有连续的非短横线字符
  • \\1:反向引用,匹配和第一个捕获组完全相同的内容
  • 整体匹配所有符合「X-X」格式的字符串,用NOT REGEXP直接排除这类值

如果需要直接删除表中这类无效数据,参考语句:

DELETE FROM org_data
WHERE 
  LENGTH(dept_tag) - LENGTH(REPLACE(dept_tag, '-', '')) = 1
  AND SUBSTRING_INDEX(dept_tag, '-', 1) = SUBSTRING_INDEX(dept_tag, '-', -1);

内容的提问来源于stack exchange,提问作者New Member-82

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:15:02