这是来自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]$'
正在编译,但给出了错误的结果
答案 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;