获取城市名称不以元音开头或不以元音结尾
Posted
技术标签:
【中文标题】获取城市名称不以元音开头或不以元音结尾【英文标题】:Get city name either do not start with vowels or do not end with vowels 【发布时间】:2018-03-12 05:55:56 【问题描述】:从 STATION 查询不以元音开头或不以元音结尾的 CITY 名称列表。您的结果不能包含重复项。
输入格式
STATION表描述如下:
我编写了以下查询,但工作正常。有什么建议吗?
SELECT DISTINCT city FROM station WHERE city NOT RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$';
【问题讨论】:
这是哪个数据库?大多数数据库不支持正则表达式。使用您的数据库支持的函数。 在什么情况下不起作用? 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresql
、oracle
、sql-server
、db2
、...
@AriSingh:实际上大多数 DBMS 确实支持正则表达式。但由于没有真正的 SQL 标准(至少对于真正的 POSIX 正则表达式),每个 DBMS 产品的语法都非常不同
基于使用VARCHAR2
的数据类型数据库是Oracle。
【参考方案1】:
假设您使用的是 mysql,这就是您要查找的内容
SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*|.*[^AEIOUaeiou]$';
脚注:RLIKE 和 DISTINCT
【讨论】:
您假设 OP 正在使用MySQL
。当问题被半心半意地标记时回答只会混淆其他提出类似问题的人。
同意!编辑了我的答案,尽管我只是修改了 OPs 答案中的查询。虽然 RLIKE 对于 diff 数据库是不同的
在 MySQL 中,RLIKE
和 REGEXP
是等价的。
@AnandG MS SQL Server 中会有什么?【参考方案2】:
此 SQL 查询将对您有所帮助。 如果您使用的是 MS SQL,请遵循下面给出的这行代码:
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT LIKE '[AEIOU]%' OR CITY NOT LIKE '%[aeiou]';
如果您使用的是 MySQL,请遵循下面给出的这行代码:
SELECT DISTINCT CITY
FROM STATION
WHERE (CITY NOT IN (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'))
OR
(CITY NOT IN (SELECT CITY FROM STATION WHERE CITY LIKE 'A%' OR CITY LIKE 'E%' OR CITY LIKE 'I%' OR CITY LIKE 'O%' OR CITY LIKE 'U%'));
【讨论】:
【参考方案3】: SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*
[^aeiouAEIOU]$';
您必须将插入字符放在方括号内,这意味着没有任何元音。 Here是解释
【讨论】:
在 MySQL 中工作。【参考方案4】:SELECT DISTINCT city
FROM station
WHERE city REGEXP '^[^aeiouAEIOU]|[^aeiouAEIOU]$'
【讨论】:
【参考方案5】:尝试以下方法:
SELECT city
FROM station
WHERE left(city,1) not regexp 'a|e|i|o|u' or right(city,1) not regexp 'a|e|i|o|u'
GROUP BY city
【讨论】:
【参考方案6】:如果您使用Oracle
,此 SQL 查询将对您有所帮助:
SELECT DISTINCT city
FROM station
WHERE regexp_like (city, '^[^aeiouAEIOU].*')
OR regexp_like (city, '.*[^aeiouAEIOU]$');
如果您使用的是 Oracle,另一个答案:
SELECT DISTINCT (CITY)
FROM STATION
WHERE NOT regexp_like(lower(CITY),'^[aeiou].*[aeiou]$');
【讨论】:
关于'^[aeiou].*[aeiou]$',这里的逗号和星号怎么理解?我看到这是一个流行的答案,但现在确定如何理解 .* 1.没有逗号,请检查。 2..*
表示字符串应该从 (aeiou) 中的任何一个开始,并且可以对该字母进行零次或多次迭代。【参考方案7】:
你可以在 MySQL 上试试这个:
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY NOT REGEXP '^[aeiou]'
AND CITY NOT REGEXP '[aeiou]$';
此查询将为您提供所问问题的所需输出。
【讨论】:
DISTINCT
不是一个函数,它是一个集合量词。只需跳过那些额外的括号并写SELECT DISTINCT CITY FROM...
,以使代码更清晰。【参考方案8】:
试试这个:
select DISTINCT city from STATION
where (CITY NOT LIKE 'a%'
AND CITY NOT LIKE 'e%'
AND CITY NOT LIKE 'i%'
AND CITY NOT LIKE 'o%'
AND CITY NOT LIKE 'u%')
OR (CITY NOT LIKE '%a' AND
CITY NOT LIKE '%e' AND
CITY NOT LIKE '%i' AND
CITY NOT LIKE '%o' AND
CITY NOT LIKE '%u')
【讨论】:
【参考方案9】:Oracle 解决方案:
SELECT DISTINCT CITY FROM STATION WHERE
NOT REGEXP_LIKE(UPPER(CITY), '^[AEIOU]') OR
NOT REGEXP_LIKE(UPPER(CITY), '[AEIOU]$');
【讨论】:
【参考方案10】:SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou]|[^aeiou]$';
这就是你要找的兄弟。
【讨论】:
【参考方案11】:试试这个:
SELECT DISTINCT CITY FROM STATION WHERE CITY NOT RLIKE '^[aeiouAEIOU]'
AND
CITY NOT RLIKE '[aeiouAEIOU]$'
【讨论】:
【参考方案12】:这是 MS SQL SERVER 的必需解决方案,
select distinct city from station where city not like '[aeiouAEIOU]%' and city not like '%[aeiouAEIOU]'
【讨论】:
【参考方案13】:SELECT DISTINCT CITY
FROM STATION
WHERE
SUBSTRING(CITY,1,1) NOT IN ('A','E','I','O','U')
OR
SUBSTRING(CITY,1,1) NOT IN ('a','e','i','o','u')
此代码适用于 MS SQL SERVER。
【讨论】:
【参考方案14】:对于 MySQL
Select DISTINCT CITY from STATION where CITY REGEXP '^[^aeiou]|[^aeiou]$';
【讨论】:
【参考方案15】:我用过这个
SELECT DISTINCT CITY FROM STATION
WHERE CITY NOT LIKE 'a%'
AND CITY NOT LIKE 'e%'
AND CITY NOT LIKE 'i%'
AND CITY NOT LIKE 'o%'
AND CITY NOT LIKE 'u%'
AND CITY NOT LIKE '%a'
AND CITY NOT LIKE '%e'
AND CITY NOT LIKE '%i'
AND CITY NOT LIKE '%o'
AND CITY NOT LIKE '%u'
【讨论】:
在问题中,它要求 OR not AND “.. 要么不以元音开头,要么不以元音结尾。”【参考方案16】:SELECT DISTINCT CITY
FROM STATION
WHERE
left(city,1) NOT IN ('a','e','i','o','u') OR RIGHT(city,1)
NOT IN ('a','e','i','o','u')
【讨论】:
拜托,如果你为你的解决方案添加一些解释文本,答案会更完整。【参考方案17】:这对我有用
SELECT DISTINCT CITY FROM STATION WHERE NOT CITY RLIKE '^[AEIOUaeiou]' AND NOT CITY RLIKE '.*[AEIOUaeiou]$'
【讨论】:
【参考方案18】:mySQL query:
SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou]' OR CITY REGEXP '[^aeiou]$'
【讨论】:
【参考方案19】:Select Distinct
City
From
Station
Where
Lower(Left(City,1)) not in ('a','e','i','o','u')
or Lower(Right(City,1)) not in ('a','e','i','o','u')
【讨论】:
请解释为什么这是一个有效的答案并格式化代码。【参考方案20】:select distinct CITY
from STATION
where SUBSTRING(CITY, Length(CITY), 1) NOT in ('a','e','i','o','u','A','E','I','O','U')
order by CITY
【讨论】:
【参考方案21】:正确回答,
SELECT DISTINCT CITY FROM STATION
WHERE NOT CITY RLIKE '^[AEIOUaeiou]' AND NOT CITY RLIKE '.*[AEIOUaeiou]$';
【讨论】:
【参考方案22】:select distinct city
from station
where city not RLIKE '^[aeiou]' and city not RLike '[aeiou]$'
【讨论】:
只包含代码的答案不被认为是完整的【参考方案23】:mysql查询:
SELECT DISTINCT city FROM station WHERE city NOT REGEXP '^[aeiouAEIOU].*[aeiouAEIOU]$';
【讨论】:
【参考方案24】:select distinct city
from station
where not lower(substr(city,1,1)) in ('a','e','i','o','u')
or not lower(substr(city,-1,1)) in ('a','e','i','o','u');
【讨论】:
【参考方案25】:下面的查询应该做你想做的事。它成功地为我工作!
SELECT DISTINCT CITY
FROM STATION
WHERE CITY NOT RLIKE '^[aeiouAEIOU]' OR CITY NOT RLIKE '[aeiouAEIOU]$'
【讨论】:
避免使用全部大写的语句!【参考方案26】:这对我使用 MYSQL 很有效。我还按城市对结果进行了分组,这不是必需的……只是更漂亮:
select distinct CITY
from STATION
where CITY NOT RLIKE '^[aeiouAEIOU]'
OR CITY NOT RLIKE '[AEIOUaeiou]$'
GROUP BY CITY;
【讨论】:
【参考方案27】:这将按照你想要的方式工作:
SELECT city
FROM station
WHERE left(city,1) not regexp 'a|e|i|o|u' or right(city,1) not regexp 'a|e|i|o|u'
GROUP BY city
【讨论】:
欢迎来到 SO。您应该添加一些解释并格式化您的代码(在这种情况下使用三个反引号和 sql 语法提示)。【参考方案28】:SELECT distinct city FROM station
WHERE City not LIKE '[aeiou]%' and CITY NOT LIKE '%[aeiou]'
【讨论】:
【参考方案29】:假设您在黑客等级上看到了这个问题,并给出了您的表 STATION 架构的屏幕截图,也说明了同样的事情。这是我的答案,它在 MYSQL 中对我有用。
select DISTINCT(city) from STATION where CITY REGEXP '^[^aeiou]' or CITY REGEXP '.*[^aeiou]$';
【讨论】:
【参考方案30】:这个怎么样:
SELECT CITY from STATION WHERE LOWER(CITY) NOT REGEXP '^[aeiou].*[aeiou]$' GROUP BY CITY
【讨论】:
欢迎来到***!提供答案时,请添加上下文来解释代码中发生的情况。只有代码的答案不被认为是完整的。以上是关于获取城市名称不以元音开头或不以元音结尾的主要内容,如果未能解决你的问题,请参考以下文章