如何编写SQL查询匹配元音结尾城市名?STATION表去重查询失效求正确方案
解决以元音结尾的城市名查询问题
没问题,我来帮你搞定这个SQL查询的需求!你需要从STATION表中提取以元音(a、e、i、o、u)结尾且无重复的城市名称,下面是几种可靠的写法,以及可能导致你之前查询失效的原因分析:
方法1:使用LIKE通配符(通用所有SQL数据库)
这是最兼容的写法,几乎所有SQL引擎都支持:
SELECT DISTINCT city FROM STATION WHERE city LIKE '%a' OR city LIKE '%e' OR city LIKE '%i' OR city LIKE '%o' OR city LIKE '%u';
DISTINCT:确保结果中没有重复的城市名,直接满足你“不包含重复值”的要求LIKE '%元音':%是任意长度的通配符,%a表示匹配以字母a结尾的任意字符串
如果你的城市名存在大小写混合的情况(比如Miami和MIAMI),可以用LOWER()函数统一转换为小写,避免漏匹配:
SELECT DISTINCT city FROM STATION WHERE LOWER(city) LIKE '%a' OR LOWER(city) LIKE '%e' OR LOWER(city) LIKE '%i' OR LOWER(city) LIKE '%o' OR LOWER(city) LIKE '%u';
方法2:使用正则表达式(更简洁,适合支持正则的数据库如MySQL、PostgreSQL)
如果你的数据库支持正则表达式,写法会更简洁:
MySQL版本
SELECT DISTINCT city FROM STATION WHERE city REGEXP '[aeiou]$';
[aeiou]:匹配任意一个元音字母$:表示匹配字符串的结尾位置,确保是最后一个字符为元音
同样,要忽略大小写的话,可以修改为:
SELECT DISTINCT city FROM STATION WHERE LOWER(city) REGEXP '[aeiou]$';
PostgreSQL版本
PostgreSQL用~作为正则匹配运算符:
SELECT DISTINCT city FROM STATION WHERE city ~ '[aeiou]$';
为什么你的查询可能失效?
常见的几个坑:
- 忘记加
DISTINCT:导致结果出现重复值,但这不会让查询完全不生效,只是不符合需求 - 用错了通配符:把结尾的
%放在前面(比如'a%'),这会匹配以元音开头的城市,而不是结尾 - 没有考虑大小写:如果城市名结尾是大写元音(比如
ATLANTA),直接用小写元音的LIKE会漏匹配 - 错误使用逻辑运算符:用
AND代替OR,这会要求城市名同时以a、e、i、o、u结尾,显然不可能,导致查询无结果
内容的提问来源于stack exchange,提问作者Payal Bhatia
相关产品推荐
相关产品推荐

