Anu*_*ava 3 mysql sql string where-clause sql-like
我的查询:
Select * From tableName Where columnName Like "[PST]%"
Run Code Online (Sandbox Code Playgroud)
没有给出预期的结果。
为什么这个通配符在 MySql 中不起作用?
如果您想过滤包含任何'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)
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 称该运算符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操作员。
LIKEMicrosoft SQL Server 在运算符和函数中部分支持正则表达式通配符dbo.RegexMatch()。
SQLite有一个GLOB运算符,等等。