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

如何实现:仅当倒数第四位不为点时排除末尾三位为abc的记录?

解决SQL排除特定后缀数据的问题

要实现你需要的逻辑——排除**最后3个字符是"abc"且倒数第4个字符不是"."**的数据,你需要把两个条件结合起来判断,而非单纯判断最后3位是否不等于"abc"。下面提供几种可行的写法:

方法1:字符串函数组合判断

通过长度和子串函数明确逻辑:

SELECT *
FROM your_table
WHERE NOT (
    RIGHT(column_name, 3) = 'abc' 
    AND (LEN(column_name) < 4 OR SUBSTRING(column_name, LEN(column_name) - 3, 1) != '.')
);
  • RIGHT(column_name, 3) = 'abc':筛选出最后3位是"abc"的数据
  • LEN(column_name) < 4:处理长度不足4的情况(比如"abc"本身,没有倒数第4位,属于要排除的范围)
  • SUBSTRING(column_name, LEN(column_name)-3, 1) != '.':当长度≥4时,判断倒数第4位不是"."
  • 用NOT()包裹整个条件,即可保留不符合排除规则的数据

方法2:LIKE模式匹配(更简洁)

如果你的数据库支持通配符[^](如SQL Server),可以用更简洁的模式:

SELECT *
FROM your_table
WHERE column_name NOT LIKE '%[^.]abc';
  • %[^.]abc表示:任意字符结尾,倒数第4位不是".",最后3位是"abc"
  • NOT LIKE会排除符合这个模式的数据,留下你需要的(比如"sdg.abc"不会匹配该模式,会被保留)

如果是MySQL数据库(不支持[^]通配符),改用正则表达式:

SELECT *
FROM your_table
WHERE column_name NOT REGEXP '[^.]abc$';
  • [^.]abc$表示字符串结尾是"abc",且"abc"的前一个字符不是"."
  • NOT REGEXP同样起到排除符合条件数据的作用

验证示例

  • "sdgabc":匹配排除条件,会被过滤
  • "sdg.abc":不匹配排除条件,会被保留
  • "abc":长度不足4且最后3位是"abc",会被过滤
  • "x.abc":倒数第4位是".",会被保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:20:29