如下图,利用SQL Server语句如何查询除了作者中包含“明”字的其他所有列,即[^明]? 我写的代码:

2024-12-22 00:34:36
推荐回答(4个)
回答1:

明字被第一个%匹配了
这和正则表达式一样,
比如 '海明威'

%匹配了 '海明' ,
[^明]匹配了'威'

后面的%什么都没匹配

如果你有一个记录作者只有一个 '明' 字
那么第一个%匹配 '明'字 然后 [^明] 必须匹配一个字,不符合,这个记录会过滤

%匹配时候,是贪婪的,所以
第一次尝试会匹配所有,发现[^明]没有匹配的,
则放弃最后一个字符,继续匹配
所以,你这个like 语句只能去掉只有一个'明'的记录

回答2:

select * from 表 where 图书编号 not in ( select 图书编号 from 表 where 作者 like '%明%')
好像 [^明] sql没识别吧! 并且这是用''号括起来的是不会执行判断的,放在外面会报错!
这种应该行不通

回答3:

你的查询结果是全部是对的,以为%代表了包含部分,[^明]表示不包含明的部分
以海明威为例子,其实第一个%已经包含“海明”,而“威”字符合[^明]这个条件,所以是能查询出来的

回答4:

你这样只能去除开头为“明”的记录:
你可以这样写啊,
select *
from 表
where not Exist (
select *
from 表
where 作者 like '%明%')