问题描述
我的查询:
Select * From tableName Where columnName Like "[PST]%"
没有给出预期的结果。
解决方法
如果要过滤包含任何'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)的更多详细信息,