在hackerRank上完成Weather Observation Station 6,我无法理解为什么前面的代码有效但后者没有。不喜欢我的喜欢条款会检测以元音开头的第一个字母,然后是跟随它的任何通配符吗?就像正则表达式锚定在字符串的开头并检查第一个字符是元音一样。为什么他们不等同?
SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiou]%';
VS。
SELECT DISTINCT city FROM station WHERE city REGEXP '^[aeiou]';
答案 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)
like
和regexp
完全不同。
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)