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

SQL查询问题:筛选含字符c且首尾非c的title结果异常排查

问题出在逻辑运算符的使用上

你写的条件(b.title not like 'c%' or b.title not like '%c')是错误的,这就是为什么还会出现首字符为c的title。给你拆解下逻辑:

  • 当某个title以c开头但结尾不是c时,not like '%c'这个条件是成立的,OR逻辑只要有一个条件为真,整个表达式就为真,所以这条不符合需求的记录会被筛选出来。
  • 你的真实需求是:title包含c,同时c不在开头也不在结尾,所以这里必须用AND而不是OR。

修正后的SQL语句

select p.name as publisher, b.title, b.name as name_ 
from book b
join publisher p on b.idpublisher = p.idpublisher
where b.title like '%c%' 
  and b.title not like 'c%' 
  and b.title not like '%c';

另外建议你用显式的JOIN语法代替旧的逗号分隔表的写法,这样代码可读性更好,也更容易维护。

额外的实现方式(Oracle专属)

既然你用的是Oracle SQL Developer,还可以用正则表达式来实现,写法更直观:

select p.name as publisher, b.title, b.name as name_ 
from book b
join publisher p on b.idpublisher = p.idpublisher
where regexp_like(b.title, '^[^c].*c.*[^c]$');

这个正则的含义是:

  • ^[^c]:开头字符不是c
  • .*c.*:字符串中间包含c
  • [^c]$:结尾字符不是c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:36