【问题标题】: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。

标签: sql


【解决方案1】:

假设您使用的是 MySQL,这就是您要查找的内容

SELECT DISTINCT city FROM station WHERE city RLIKE '^[^aeiouAEIOU].*|.*[^AEIOUaeiou]$';

脚注:RLIKEDISTINCT

【讨论】:

  • 您假设 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
                                        

                                        【讨论】:

                                        • 欢迎来到stackoverflow!提供答案时,请添加上下文来解释代码中发生的情况。只有代码的答案不被认为是完整的。
                                        猜你喜欢
                                        • 2019-12-27
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2015-12-16
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2016-08-06
                                        相关资源
                                        最近更新 更多