我想要输出。我必须打印第一个和最后一个字符为元音的城市。
ashoke
eureka
onkar
okkko
uae
eau
为此,我在下面编写了查询。任何有效的方法都可以做到这一点。
select distinct city from station where city like 'a%%a' or
city like 'a%%e' or
city like 'a%%i' or
city like 'a%%o' or
city like 'a%%u' or;
city like 'e%%a' or
city like 'e%%e' or
city like 'e%%i' or
city like 'e%%o' or
city like 'e%%u' or
city like 'i%%a' or
city like 'i%%e' or
city like 'i%%i' or
city like 'i%%o' or
city like 'i%%u' or
city like 'o%%a' or
city like 'o%%e' or
city like 'o%%i' or
city like 'o%%o' or
city like 'o%%u' or
city like 'u%%a' or
city like 'u%%e' or
city like 'u%%i' or
city like 'u%%o' or
city like 'u%%u' ;
答案 0 :(得分:3)
假设所有城市名称均为小写字母,则可以执行以下操作:
select city
from station
where substr(city, 1, 1) in ('a', 'e', 'i', 'o', 'u')
and substr(city, -1, 1) in ('a', 'e', 'i', 'o', 'u')
substr(city, 1, 1)
取city
的子字符串,从位置1开始,其长度为1(意味着,只是第一个字母)。 substr(city, -1, 1)
非常相似,只是位置不同:-1
表示字符串的 end 中的第一个字母-因此,这将为您提供城市名称的最后一个字母。
如果city
可能同时包含大小写字母,请在WHERE
子句中使用lower(city)
而不是city
。
编辑:根据普遍要求,以下是使用正则表达式可以完成的操作。不过,在这里使用正则表达式是没有意义的。几乎可以肯定,标准字符串函数(如SUBSTR)要比基于正则表达式的任何函数都要快得多。
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
恰好表示这些字符之一。 ^
表示锚定在字符串的开头,类似地$
在字符串的末尾。严格来说,这要求城市名称至少要包含两个字母;如果可以使用一个字母的城市名称,则可以轻松进行修改。 (SUBSTR方法无需进行任何更改。)
最后一个参数'i'
使regexp匹配不区分大小写(以防万一)。