Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用$symbol而不是%_Mysql_Sql_Regex_Sql Like - Fatal编程技术网

Mysql 使用$symbol而不是%

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

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

hackerrank中的这个问题陈述指出,查询列出了电台中不以元音结尾的城市名称

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

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';

如果您想要更快的查询,请使用()或
REGEXP

MySQL不支持类似
的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子句来实现这一点,但是与正则表达式相比,它的运行效率可能要低一些(当然写起来也要低一些)