MySql 中的通配符类型

Types of Wildcards in 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 服务器的 LIKE 语法记录在此处:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-ver15

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

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

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

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

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

MySQL调用了运算符REGEXPRLIKE是同义词(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 服务器在 LIKE 运算符中部分支持正则表达式通配符,还有一个 dbo.RegexMatch() 函数。

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

谢谢大家!

具体这个问题,我们需要用到正则表达式

Select * 来自 tableName Where ColumnName Regexp "^[PST]";

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

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