我得到了一个关系表 STATION
,如下所示:
+------+----------------+-------+-------+--------+
| ID | CITY | STATE | LAT_N | LONG_W |
+------+----------------+-------+-------+--------+
| 794 | Kissee Mills | MO | 140 | 73 |
| 824 | Loma Mar | CA | 49 | 131 |
| 603 | Sandy Hook | CT | 72 | 148 |
| 478 | Tipton | IN | 34 | 98 |
| 619 | Arlington | CO | 75 | 93 |
| 711 | Turner | AR | 50 | 101 |
| 839 | Slidell | LA | 85 | 152 |
| 342 | Chignik Lagoon | AK | 103 | 153 |
+------+----------------+-------+-------+--------+
并且我需要执行以下查询:
从STATION查询以元音(即a,e,i,o或u)开头的CITY名称列表。
我正在Ubuntu OS上使用MySQL 5.7版。
现在,这是我的尝试:
SELECT CITY
FROM STATION
WHERE LOWER(CITY) LIKE '[aeiou]%';
但是没有不能产生所需的结果。我得到一个空集作为输出。但是,这很好用:
SELECT CITY
FROM STATION
WHERE LOWER(CITY) REGEXP '^[aeiou]';
我想知道使用LIKE
运算符的第一种方法有什么问题吗?我是SQL新手,所以如果做错了事,请原谅。
谢谢您的时间。
答案 0 :(得分:1)
SELECT c1, c2,
c3 - nvl(lag(c3) OVER (PARTITION BY c2 ORDER BY c1), c3) as diff
FROM t;
不支持通配符。您可以对正则表达式执行类似的操作:
LIKE
答案 1 :(得分:0)
LIKE
和REGEXP
遵循的模式匹配规则不同。 REGEXP
支持正则表达式,而LIKE
可以理解通配符'_'
(单个字符)和'%'
(任意数量的字符,根本不包含任何字符)。
这在the pattern matching documentation中有很好的解释:
SQL模式匹配使您可以使用_来匹配任何单个字符,并使用%来匹配任意数量的字符(包括零个字符)。在MySQL中,默认情况下,SQL模式不区分大小写。这里显示了一些示例。使用SQL模式时,请勿使用=或<>。改用LIKE或NOT LIKE比较运算符。
[...]
MySQL提供的另一种模式匹配使用扩展的正则表达式。在测试这种模式的匹配项时,请使用REGEXP_LIKE()函数(或REGEXP或RLIKE运算符,它们是REGEXP_LIKE()的同义词)。
侧面说明:两种模式匹配方法默认情况下都不区分大小写(除非您使用某些特殊归类),因此可以将正则表达式简化为不使用lower()
函数:
city like regexp '^[aeiou]'
如果要用like
来表示,那就是:
city like 'a%'
or city like 'e%'
or city like 'i%'
or city like 'o%'
or city like 'u%'