获取城市名称不以元音开头或不以元音结尾

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”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloraclesql-serverdb2、... @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 中,RLIKEREGEXP 是等价的。 @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

【讨论】:

欢迎来到***!提供答案时,请添加上下文来解释代码中发生的情况。只有代码的答案不被认为是完整的。

以上是关于获取城市名称不以元音开头或不以元音结尾的主要内容,如果未能解决你的问题,请参考以下文章

用于检查名称是不是以元音开头和结尾的 SQL 查询

在 SQL 中,我想显示所有以元音结尾的城市的名称

在SQL中,我想显示以元音结尾的所有城市的名称

SQL中的NOT LIKE IN语句[重复]

如何消除可能以或不以 www 开头的“重复”URL MySQL 行?

如何使用正则表达式匹配不以某些字符开头或结尾的单词?