HackerRank:LIKE vs REGEXP

时间:2016-04-13 15:55:18

标签: mysql sql

在hackerRank上完成Weather Observation Station 6,我无法理解为什么前面的代码有效但后者没有。不喜欢我的喜欢条款会检测以元音开头的第一个字母,然后是跟随它的任何通配符吗?就像正则表达式锚定在字符串的开头并检查第一个字符是元音一样。为什么他们不等同?

SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiou]%';

VS。

SELECT DISTINCT city FROM station WHERE city REGEXP '^[aeiou]';

3 个答案:

答案 0 :(得分:2)

like不起作用。它会根据您的查询查找以[aeiou]开头的字符串。

要使用like获取以元音开头的值,您应该

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%'

编辑:

如@dnoeth和@Martin Smith的评论所述, like '[aeiou]%'可以在SQL Server(T-SQL扩展)中使用。但是,SQL Server不支持regexp。在我所知道的所有其他数据库中,like '[aeiou]%'将匹配以'[aeiou]'开头的文字字符串。

答案 1 :(得分:1)

我已经重新编写了你的​​正则表达式查询,这个可行。

因为你错过了' |'符号正则表达式正在搜索完全匹配" aeiou"

SELECT DISTINCT city FROM station WHERE city REGEXP '^[a|e|i|o|u]';

答案 2 :(得分:0)

likeregexp完全不同。

like仅识别星号'%'和'_',而regexp使用正则表达式,这更强大。

这是一个演示:

mysql> select 'ixxx' LIKE '[aeiou]', 'ixxx' REGEXP '[aeiou]';
+-----------------------+-------------------------+
| 'ixxx' LIKE '[aeiou]' | 'ixxx' REGEXP '[aeiou]' |
+-----------------------+-------------------------+
|                     0 |                       1 |
+-----------------------+-------------------------+
1 row in set (0.00 sec)