MySql中的通配符类型

问题描述

我的查询

Select * From tableName Where columnName Like "[PST]%"

没有给出预期的结果。

为什么该通配符在MysqL中不起作用?

解决方法

如果要过滤包含任何'P''S''T'的字符串,则可以使用正则表达式:

where col rlike '[PST]'

如果您想要包含子字符串'PST'的字符串,则不需要方括号-并且like就足够了:

where col like '%PST%'

如果要在字符串的开头使用匹配的字符,则正则表达式解决方案如下:

where col rlike '^PST'

like选项为:

where col like 'PST%'
,

此处记录了MySQL的LIKE语法:https://dev.mysql.com/doc/refman/8.0/en/pattern-matching.html

几十年前的标准SQL仅定义了两个通配符:%_。这些是SQL产品想要说它们符合SQL并支持LIKE谓词的唯一通配符。

%匹配零个或多个任何字符。它与正则表达式中的.*类似。

_完全匹配任何字符之一。它与正则表达式中的.类似。

此外,如果您想匹配文字'%'或'_',则需要对其进行转义,即在其前面加上反斜杠:

WHERE title LIKE 'The 7\% Solution'

此处记录了Microsoft SQL Server的LIKE语法:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-ver15

它们支持%_通配符,以及\转义符,但是它们以其他两种形式扩展了标准SQL:

[a-z]匹配一个字符,但仅匹配括号内范围内的字符。这在正则表达式中类似。 -是一个范围运算符,除非它出现在方括号内字符串的开头或结尾。

[^a-z]匹配一个字符,该字符必须 not 不是括号内范围内的字符之一。在正则表达式中也相同。

这些不是LIKE谓词的标准通配符形式,并且其他品牌的SQL数据库不支持它们。

SQL标准的更高版本引入了新的谓词SIMILAR TO,该谓词支持更丰富的模式和通配符,因为右侧操作数是包含正则表达式的字符串。但是由于此谓词是在SQL标准的更高版本中引入的,因此某些实现已经开发了自己的解决方案,该解决方案几乎是相同的。

MySQL称为运算符REGEXP,而RLIKE是同义词(https://dev.mysql.com/doc/refman/8.0/en/regexp.html)。

https://bugs.mysql.com/bug.php?id=746中请求支持SIMILAR TO语法以帮助MySQL遵守SQL标准,但是该请求被拒绝了,因为它的行为与现有的REGEXP略有不同/ RLIKE运算符。

Microsoft SQL Server在LIKE运算符中部分支持正则表达式通配符,并且还具有dbo.RegexMatch()函数。

SQLite具有GLOB运算符,依此类推。

,

谢谢大家!

对于这个问题,我们需要使用regexp

选择* From tableName其中ColumnName正则表达式“ ^ [PST]”;

有关正则表达式(即Regexp)的更多详细信息,

https://www.youtube.com/watch?v=KoltE-JUY0c