我想查询表格中的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)
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)
您可以对第一个和最后一个字符进行子字符串化并将其与 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)
小智 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)
您可以使用以下正则表达式并反转结果:
^[^aeiou]|[^aeiou]$
Run Code Online (Sandbox Code Playgroud)
即使输入由单个字符组成,这也有效。它应该可以跨不同的正则表达式引擎工作。
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)