输出的第一个和最后一个字母为元音(a,e,i,o,u)

时间:2018-08-22 22:04:25

标签: sql oracle

我想要输出。我必须打印第一个和最后一个字符为元音的城市。

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' ;

1 个答案:

答案 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匹配不区分大小写(以防万一)。