我已经开始练习SQL,我认为我需要复习一些主题。
这个在hackerrank中的问题陈述指出,查询列出了STATION中不以元音结尾的CITY名称。
我尝试使用通配符'%[^aeiou]'
SELECT Distinct City
FROM Station
Where City LIKE '%[^aeiou]'
Order By City;
编译器消息:回答错误。
我知道执行该程序的其他方法,但是这个方法有什么问题。另外,我想知道REGEXP '[^aiueo]$'
的工作方式如何,但是Like '%[^aeiou]
或Not Like '%[aeiou]'
无法执行?
答案 0 :(得分:2)
MySQL不支持LIKE
的SQL Server扩展。改用正则表达式:
SELECT DISTINCT City
FROM Station
WHERE City REGEXP '[^aeiou]$'
ORDER BY City;
请注意,您必须将正则表达式锚定到字符串的末尾。 LIKE
个模式会自动匹配整个字符串; REGEXP
模式可以匹配字符串中的任何位置,除非锚定在开头或结尾。
或者,避开正则表达式:
SELECT DISTINCT City
FROM Station
WHERE RIGHT(City, 1) NOT IN ('a', 'e', 'i', 'o', 'u')
ORDER BY City;
答案 1 :(得分:1)
LIKE
仅支持通配符,并且用于非常简单的匹配。
REGEXP
或RLIKE
具有完整的正则表达式支持。
正则表达式是为模式指定模式的有效方法 复杂的搜索。本节讨论功能和运算符 可用于正则表达式匹配并通过 例如,一些特殊的字符和构造可以 用于正则表达式操作。
如果必须使用LIKE
,请尝试以下操作:
SELECT DISTINCT City
FROM Station
WHERE City NOT LIKE '%a'
OR City NOT LIKE '%e'
OR City NOT LIKE '%i'
OR City NOT LIKE '%o'
OR City NOT LIKE '%u';
如果您想更快地查询,请使用RIGHT(Gordon Linoff answer)或REGEXP