希望一切都好。来自 HackerRank 的非常基本的 SQL 问题,但由于某种原因,编译器不会接受我的解决方案。这是我们所拥有的:
问题:
我的解决方案
SELECT DISTINCT CITY
FROM STATION
WHERE CITY LIKE '[AEIOU]%[AEIOU]';
我已经检查了有关此同一问题的其他帖子,但所提供的解决方案似乎都不适用于 HackerRank。任何见解总是最受赞赏的。
从 STATION 查询以元音(即 a、e、i、o 和 u)作为第一个和最后一个字符的 CITY 名称列表。您的结果不能包含重复项。 我可以使用这个查询
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%') AND (CITY LIKE '%a' OR CITY LIKE '%e' OR CITY LIKE '%i' OR CITY LIKE '%o' OR CITY LIKE '%u');
我认为您忘记在 WHERE 条件下将 UPPER 函数与 CITY 列一起使用 -
SELECT DISTINCT CITY
FROM STATION
WHERE REGEXP_LIKE(UPPER(CITY), '^[AEIOU]+(.)+[AEIOU]$');
这对我有用
选择不同的(城市)
从车站出发
哪里
LEFT(CITY,1) IN ('A','E','I','O','U')
并且
RIGHT(CITY,1) IN ('a','e','i','o','u');
我注意到带有
[]
的解决方案不适用于 HackerRancks 挑战中的某些数据库管理系统,例如 MySQL、Oracle 和 DB2。然而它确实可以在 MS SQL Server 上运行。
对我有用的 MS SQL Server 代码
SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiou]%' AND CITY LIKE '%[aeiou]';
我使用
AND
运算符来分隔我的条件。
对于其余的(DB2、MySQL 和 Oracle),这个(长)解决方案对我有用
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%')
AND (CITY LIKE '%a' OR CITY LIKE '%e' OR CITY LIKE '%i' OR CITY LIKE '%o' OR CITY LIKE '%u');
我再次使用
AND
来分隔我的两个条件。
这肯定适用于mysql
select distinct city from station where city regexp '^[aeiou]' and city regexp '[aeiou]$';
在 MySql Server 上这对我有用。
Select Distinct CITY From STATION Where CITY Like '[aeiou] % [aeiou]';
使用了此查询。
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiouAEIOU].*[aeiouAEIOU]$';
REGEXP 运算符用于将 CITY 列与正则表达式模式 '^[aeiouAEIOU].*[aeiouAEIOU]$' 进行匹配。这是该模式的解释:
^
表示字符串的开头。[aeiouAEIOU]
匹配属于指定元音之一的任何单个字符(小写和大写)。*
匹配零个或多个任意字符。[aeiouAEIOU]$
匹配字符串末尾指定元音(小写和大写)之一的任何单个字符。$
表示字符串的结尾。从车站中选择不同的城市,其中城市像'[aeiou]%'和right(city,1) in ('a', 'e', 'i', 'o', 'u')。
我的解决方案对我来说最简单,只需使用 和 关键字进行操作即可。
我的解决方案基于 ms sql server,但您可以将语法更改为您正在使用的语法。
希望有帮助!