使用$符号代替%

时间:2019-06-17 08:42:47

标签: mysql sql regex sql-like

我已经开始练习SQL,我认为我需要复习一些主题。

这个在hackerrank中的问题陈述指出,查询列出了STATION中不以元音结尾的CITY名称。

我尝试使用通配符'%[^aeiou]'

SELECT Distinct City 
FROM Station 
Where City LIKE '%[^aeiou]'
Order By City;
  

编译器消息:回答错误。

我知道执行该程序的其他方法,但是这个方法有什么问题。另外,我想知道REGEXP '[^aiueo]$'的工作方式如何,但是Like '%[^aeiou]Not Like '%[aeiou]'无法执行?

2 个答案:

答案 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仅支持通配符,并且用于非常简单的匹配。

REGEXPRLIKE具有完整的正则表达式支持。

  

正则表达式是为模式指定模式的有效方法   复杂的搜索。本节讨论功能和运算符   可用于正则表达式匹配并通过   例如,一些特殊的字符和构造可以   用于正则表达式操作。

请参阅LIKEREGEXP上的手册

如果必须使用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';

如果您想更快地查询,请使用RIGHTGordon Linoff answer)或REGEXP