为何MySQL LIKE '[aeiouAEIOU]%'在W3Schools可用却在HackerRank失效?
为什么MySQL中
LIKE '[aeiouAEIOU]%'无效,而REGEXP '^[aeiouAEIOU]'有效? 核心原因是不同SQL数据库对LIKE语法的支持存在差异:
MySQL的
LIKE运算符仅支持两种基础通配符:%(匹配任意长度的任意字符)和_(匹配单个任意字符),完全不支持[字符集]这种正则风格的范围匹配。你在W3Schools测试时,大概率用的是SQL Server、Access这类支持方括号语法的数据库,所以那段代码能正常运行;但放到MySQL环境(比如HackerRank使用的MySQL)里,[aeiouAEIOU]会被当成字面量字符串去匹配——也就是只会查找以[aeiouAEIOU]这个具体字符串开头的城市,自然查不到符合要求的结果。而
REGEXP(MySQL也支持用RLIKE作为别名)是MySQL专门处理正则表达式匹配的运算符,^[aeiouAEIOU]的含义是:匹配以a/e/i/o/u(含大小写)中任意一个字符开头的字符串,完全契合你的查询需求,所以在HackerRank的MySQL环境中可以正常生效。
两段代码对比
无效代码(MySQL不支持):
SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiouAEIOU]%';
有效代码(MySQL正则匹配写法):
SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[aeiouAEIOU]' ORDER BY CITY;
内容的提问来源于stack exchange,提问作者Gocha Gvinjilia
相关产品推荐
相关产品推荐

