MySql 中的通配符类型

Anu*_*ava 3 mysql sql string where-clause sql-like

我的查询:

Select * From tableName Where columnName Like "[PST]%"
Run Code Online (Sandbox Code Playgroud)

没有给出预期的结果。

为什么这个通配符在 MySql 中不起作用?

GMB*_*GMB 8

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

where col rlike '[PST]'
Run Code Online (Sandbox Code Playgroud)

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

where col like '%PST%'
Run Code Online (Sandbox Code Playgroud)

如果您想要在字符串开头匹配字符,则正则表达式解决方案如下所示:

where col rlike '^PST'
Run Code Online (Sandbox Code Playgroud)

选项like是:

where col like 'PST%'
Run Code Online (Sandbox Code Playgroud)

  • 如果可以的话,我会为“rlike”投 10 票。我错过了什么?!今天学到了新东西,谢谢! (2认同)

Bil*_*win 5

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

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

%匹配零个或多个任意字符。它类似于.*正则表达式。

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

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

WHERE title LIKE 'The 7\% Solution'
Run Code Online (Sandbox Code Playgroud)

Microsoft SQL Server 的 LIKE 语法记录如下:https://learn.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,它支持更丰富的模式和通配符,因为右侧操作数是包含正则表达式的字符串。但由于这个谓词是在 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操作员。

LIKEMicrosoft SQL Server 在运算符和函数中部分支持正则表达式通配符dbo.RegexMatch()

SQLite有一个GLOB运算符,等等。