SQL NOT LIKE 对“A”、“E”、“R”、“T”不区分大小写

问题描述

编写一个 sql 语句,显示电影表中电影的所有列。 仅显示标题不包含以下任何字母的电影:A E R T(任何情况)

我尝试将查询编写为

SELECT '103040698' as StudID,MovieNo,Title,RelYear,RunTime,ratingCode,ColourCode,TMDB_score,TMDB_Votes,IMDB_ID
FROM Movie0698
WHERE NOT Title  LIKE '%A%'
(or NOT Title LIKE '%E%')
(or NOT Title LIKE '%r%')
(or NOT Title LIKE '%T%')

甚至

SELECT '103040698' as StudID,IMDB_ID
FROM Movie0698
WHERE NOT Title LIKE ('%[aA][eE][rR][tT]%') 

甚至

SELECT '103040698' as StudID,IMDB_ID
FROM Movie0698
WHERE (NOT Title LIKE '%a%' AND NOT Title LIKE '%A%')
OR (NOT Title LIKE '%e%' AND NOT Title LIKE '%E%')
OR (NOT Title LIKE '%r%' AND NOT Title LIKE '%r%')
OR (NOT Title LIKE '%t%' AND NOT Title LIKE '%T%')
ORDER BY  Title DESC;

但无论哪种方式,我仍然会得到标题中包含大写或小写字母之一的电影的结果

顺便说一下,我使用的是 sqljunior,我认为它区分大小写

解决方法

您需要逻辑与,而不是逻辑或。使用 OR 时,满足其中一个条件就足够了,但对于同一记录,您需要同时满足所有条件。

所以:

WHERE UPPER(Title) NOT LIKE '%A%' 
  AND UPPER(Title) NOT LIKE '%E%'
  AND UPPER(Title) NOT LIKE '%R%'
  AND UPPER(Title) NOT LIKE '%T%'

用于大写字符串的实际语法取决于您使用的数据库引擎。因此,将 UPPER 替换为您的数据库支持的内容。

,

您似乎在使用 SQL Server,在这种情况下,您可以在 WHERE 子句中使用单个条件并增强 LIKE

SELECT '103040698' AS StudID,MovieNo,Title,RelYear,RunTime,RatingCode,ColourCode,TMDB_Score,TMDB_Votes,IMDB_ID
FROM Movie0698
WHERE Title NOT LIKE ('%[aAeErRtT]%');

根据您的数据库,还有其他类似的方法。例如,在 MySQL 上,您可以使用:

WHERE Title NOT REGEXP '[aAeErRtT]'

如果这些都不可用,那么您将不得不使用@Trincot 答案中的方法。