首页 > 解决方案 > SQL NOT LIKE 对“A”、“E”、“R”、“T”不区分大小写

问题描述

编写一条 SQL 语句,显示电影表中电影的所有列。仅显示标题不包含以下任何字母的电影:AERT(任何大小写)

我试图将查询编写为

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, MovieNo, Title,RelYear, RunTime, RatingCode, ColourCode, TMDB_Score, TMDB_Votes, IMDB_ID
FROM Movie0698
WHERE NOT Title LIKE ('%[aA][eE][rR][tT]%') 

甚至

SELECT '103040698' as StudID, MovieNo, Title,RelYear, RunTime, RatingCode, ColourCode, TMDB_Score, TMDB_Votes, 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

标签: sqlsql-likecase-sensitivecase-insensitive

解决方案


您需要逻辑 AND,而不是逻辑 OR。使用 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为您的数据库支持的内容。


推荐阅读