【问题标题】:SQL NOT LIKE incasesensitive for 'A', 'E', 'R', 'T'SQL NOT LIKE 对“A”、“E”、“R”、“T”不区分大小写
【发布时间】:2021-04-30 10:03:17
【问题描述】:

编写一条 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, 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,我认为它区分大小写

【问题讨论】:

  • 您的实际数据库是什么? SQL 只是一种语言,但您的数据库可能是 MySQL、SQL Server、Oracle、Postgres...或其他。

标签: sql sql-like case-sensitive case-insensitive


【解决方案1】:

您需要逻辑与,而不是逻辑或。使用 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。

【讨论】:

    【解决方案2】:

    您似乎正在使用 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 答案中的方法。

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2016-01-17
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      相关资源
      最近更新 更多