You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:20