Mysql 使用$symbol而不是%
我已经开始练习SQL,我想我需要复习一些主题 hackerrank中的这个问题陈述指出,查询列出了电台中不以元音结尾的城市名称 我尝试使用通配符%[^aeiou]Mysql 使用$symbol而不是%,mysql,sql,regex,sql-like,Mysql,Sql,Regex,Sql Like,我已经开始练习SQL,我想我需要复习一些主题 hackerrank中的这个问题陈述指出,查询列出了电台中不以元音结尾的城市名称 我尝试使用通配符%[^aeiou] SELECT Distinct City FROM Station Where City LIKE '%[^aeiou]' Order By City; 编译器消息:回答错误 我知道执行程序的其他方法,但是这个有什么问题。另外,我想知道REGEXP“[^aiueo]$”是如何工作的,但是像“[^aeiou]这样的或者像“[aei
SELECT Distinct City
FROM Station
Where City LIKE '%[^aeiou]'
Order By City;
编译器消息:回答错误
我知道执行程序的其他方法,但是这个有什么问题。另外,我想知道REGEXP
“[^aiueo]$”
是如何工作的,但是像“[^aeiou]这样的或者像“[aeiou]”这样的不可执行?
只支持通配符,并且用于非常简单的匹配
REGEXP
或RLIKE
具有完全的正则表达式支持
正则表达式是为对象指定模式的强大方式
复杂的搜索。本节讨论函数和运算符
可用于正则表达式匹配和演示,带有
例如,一些特殊字符和结构可以
用于正则表达式操作
请参阅和上的手册
如果必须像
一样使用,请尝试以下操作:
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';
如果您想要更快的查询,请使用()或REGEXPMySQL不支持类似的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;
因为LIKE和regex非常不兼容。它们是不同(但相似)工作的不同工具。真的,把它们结合起来没有任何意义。类似于在特定文本上进行简单匹配,例如,类似“%ball”
将返回结尾包含(确切地说是)“ball”的所有字段,例如足球、棒球、无网球等。但是说“LIKE this regex”(根据您的代码)毫无意义-regex已经是一种不同的、更复杂的数据过滤方式。它已经有了一种不同的方法来指定您是在字段的末尾、开头还是在任何地方寻找匹配项。将LIKE与regex结合起来没有任何意义,而且您也不需要这样做,因为regex可以完成LIKE可以做的任何事情,除此之外还有很多其他事情。当您需要一个非常简单的“此字符串是否在此字段内”匹配时使用LIKE,当您需要更复杂的匹配时使用regex(如上面的示例,您正在查找可能以几个不同字符之一结尾的字段)LIKE
仅支持通配符,REGEXP
完全支持正则表达式。@swapnillindahood如果有人的答案解决了您的问题,您可能希望使用大复选框将其作为答案接受。否则写下你是如何解决的。我们能用LIKE和通配符解决这个问题吗?如果没有,可能的原因是什么?@swapnildahood使用LIKE,No无法解决“内容不以元音结尾”的问题。这是因为,正如我在上面解释的那样,我们只需要简单地搜索一段固定的文本。它无法搜索一组可能的替代方案中的任何一个,这正是正则表达式所做的。您可以使用一系列用OR分隔的LIKE子句来实现这一点,但是与正则表达式相比,它的运行效率可能要低一些(当然写起来也要低一些)