从STATION查询不以元音开头也不以元音结尾的CITY名称列表。您的结果不能包含重复项

时间:2019-06-13 07:21:23

标签: mysql

这是来自hackerrank的mysql

我的第一个查询工作正常

select distinct city from station where city not regexp '^[aeiou]' and city not regexp '[aeiou]$'

但是我的第二个查询给出了错误的答案

select distinct city from station where city not regexp '^[aeiouAEIOU].*[aeiouAEIOU]$'

正在编译,但给出了错误的结果

4 个答案:

答案 0 :(得分:2)

https://dev.mysql.com/doc/refman/8.0/en/regexp.html

“ NOT REGEXP”是REGEXP的否定项,

'REGEXP'->检查'REGEXP'是否满足,然后返回1,否则返回0

    select 'Chelsea' REGEXP '^[aeiou].*[aeiou]$' ;

        0

'NOT REGEXP'->检查'REGEXP',然后返回结果的反面。

    select 'Chelsea' not REGEXP '^[aeiou].*[aeiou]$' ;

        1

在这种情况下,“切尔西”不是以元音开头,因此REGEXP为0,而not REGEXP为1。

因此,您正在计算城市,即使名称以元音开头或结尾。

答案 1 :(得分:0)

这在MS SQL服务器中有效:

SELECT DISTINCT city FROM station WHERE city NOT LIKE '[AEIOU]%' AND city NOT LIKE '%[aeiou]';

答案 2 :(得分:0)

使用此 MySQL 命令:

SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou].*[^aeiou]$';

说明: DISTINCT 用于从 SELECT 语句的结果集中删除重复项。 “^[^aeiou]”表示不以元音开头的城市名称。 “[^aeiou]$”表示不以元音结尾的城市名称。 “.*”代表任意长度的任意字符串。

答案 3 :(得分:-1)

这对我使用RLIKE运算符有效...希望对您有所帮助:

select distinct CITY from STATION where CITY NOT RLIKE '^[aeiouAEIOU]' AND CITY NOT RLIKE '[AEIOUaeiou]$' GROUP BY CITY;