SQL Server中LIKE运算符查询疑问:为何第三个SQL语句不生效?
问题分析:为何第三条SQL语句无法正确筛选目标城市?
需求:从STATION表中查询所有不以元音开头且不以元音结尾的CITY名称,结果需去重。
三条SQL语句对比
- 有效语句1:
SELECT DISTINCT CITY FROM STATION WHERE CITY NOT LIKE '[aeiou]%' AND CITY NOT LIKE '%[aeiou]'
这条语句逻辑直接:同时排除「以元音开头」和「以元音结尾」的城市,完全匹配需求,能得到正确结果。
- 有效语句2:
SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[^aeiou]%[^aeiou]';
这里[^aeiou]表示匹配非元音字符,整个条件是筛选「开头是非元音、结尾也是非元音」的城市,和需求完全契合,结果正确。
- 无效语句:
SELECT DISTINCT CITY FROM STATION WHERE CITY NOT LIKE '[aeiou]%[aeiou]';
这条语句的逻辑是排除那些「开头是元音且结尾也是元音」的城市,但这和我们要的「不以元音开头且不以元音结尾」不是一个概念。它会错误保留以下不符合要求的城市:
- 以元音开头但结尾非元音的(比如"Atlanta")
- 不以元音开头但结尾是元音的(比如"Seattle")
这些城市都不符合需求,却会被这条语句包含在结果里,所以无法得到正确数据。
内容的提问来源于stack exchange,提问作者Kaustubh Dwivedi
相关产品推荐
相关产品推荐

