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

Zeu*_*eus 23 mysql sql select

我想查询表格中的CITY名字列表,这些名字的STATION(id, city, longitude, latitude)元音是他们的第一个和最后一个字符.结果不能包含重复项.

为此我写了一个类似于WHERE NAME LIKE 'a%'25条件的查询,每个元音都用于其他每个元音,这是非常笨拙的.有没有更好的方法呢?

Mur*_*nik 52

您可以使用正则表达式:

SELECT DISTINCT city
FROM   station
WHERE  city RLIKE '^[aeiouAEIOU].*[aeiouAEIOU]$'
Run Code Online (Sandbox Code Playgroud)

  • 100%,正则表达式绝对是要走的路!注意,这个语法是MySQL. (3认同)

Ban*_*yan 16

Microsoft SQL Server中,您可以从以下查询中实现此目的:

SELECT distinct City FROM STATION WHERE City LIKE '[AEIOU]%[AEIOU]'
Run Code Online (Sandbox Code Playgroud)

要么

SELECT distinct City FROM STATION WHERE City LIKE '[A,E,I,O,U]%[A,E,I,O,U]'
Run Code Online (Sandbox Code Playgroud)


小智 12

您可以为 MySQL 尝试一种简单的解决方案:

SELECT DISTINCT city FROM station WHERE city REGEXP "^[aeiou].*[aeiou]$";
Run Code Online (Sandbox Code Playgroud)


Bar*_*mar 11

使用正则表达式.

WHERE name REGEXP '^[aeiou].*[aeiou]$'
Run Code Online (Sandbox Code Playgroud)

^并将$匹配锚定到值的开头和结尾.

在我的测试中,这不会在name列上使用索引,因此需要执行完整扫描

WHERE name LIKE 'a%a' OR name LIKE 'a%e' ...
Run Code Online (Sandbox Code Playgroud)

我认为要使用一个索引,你需要使用每个测试第一个字母的查询联合.

SELECT * FROM table
WHERE name LIKE 'a%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'e%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'i%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'o%' AND name REGEXP '[aeiou]$'
UNION
SELECT * FROM table
WHERE name LIKE 'u%' AND name REGEXP '[aeiou]$'
Run Code Online (Sandbox Code Playgroud)


小智 9

你可以试试这个

    select city
    from station where SUBSTRING(city,1,1) in ('A','E','I','O','U') and 
    SUBSTRING(city,-1,1) in ('A','E','I','O','U');
Run Code Online (Sandbox Code Playgroud)


ogr*_*res 5

您可以对第一个和最后一个字符进行子字符串化并将其与 IN 关键字进行比较,

WHERE SUBSTRING(NAME,1,1) IN (a,e,i,o,u) AND SUBSTRING(NAME,-1) IN (a,e,i,o,u) 
Run Code Online (Sandbox Code Playgroud)

  • 您的查询可能需要对 IN 括号内的字符使用单引号。 (3认同)

小智 5

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'
)
Run Code Online (Sandbox Code Playgroud)


Sal*_*n A 5

您可以使用以下正则表达式并反转结果

^[^aeiou]|[^aeiou]$
Run Code Online (Sandbox Code Playgroud)

即使输入由单个字符组成,这也有效。它应该可以跨不同的正则表达式引擎工作。

MySQL

SELECT city
FROM (
    SELECT 'xx' AS city UNION
    SELECT 'ax'         UNION
    SELECT 'xa'         UNION
    SELECT 'aa'         UNION
    SELECT 'x'          UNION
    SELECT 'a'
) AS station
WHERE NOT city REGEXP '^[^aeiou]|[^aeiou]$'
Run Code Online (Sandbox Code Playgroud)

PostgreSQL

WHERE NOT city ~ '^[^aeiou]|[^aeiou]$'
Run Code Online (Sandbox Code Playgroud)

甲骨文

WHERE NOT REGEXP_LIKE(city, '^[^aeiou]|[^aeiou]$')`
Run Code Online (Sandbox Code Playgroud)

SQL服务器

没有正则表达式支持。使用LIKE带有方括号的子句:

WHERE city LIKE '[aeiou]%' AND city LIKE '%[aeiou]'
Run Code Online (Sandbox Code Playgroud)