Postgresql LIKE 子句
在 Postgresql 中,LIKE 子句用于执行模糊匹配查询,通常与 WHERE 子句一起使用,用于在文本字段中查找包含特定模式的数据。LIKE 子句支持使用通配符来进行模式匹配。
基本语法
string LIKE pattern [ESCAPE escape-character] string NOT LIKE pattern [ESCAPE escape-character]
如果字符串与提供的模式匹配,则 LIKE 表达式返回 true。(正如预期的那样,如果 LIKE 返回 true,则 NOT LIKE 表达式返回 false,反之亦然。等效表达式为 NOT (string LIKE pattern)。
如果 pattern 不包含百分号或下划线,则 pattern 仅表示字符串本身;在这种情况下,LIKE 的作用类似于 equals 运算符。pattern 中的下划线 (_) 代表(匹配)任何单个字符;百分号 (%) 匹配零个或多个字符的任何序列。
使用示例
'abc' LIKE 'abc' true 'abc' LIKE 'a%' true 'abc' LIKE '_b_' true 'abc' LIKE 'c' false
LIKE 模式匹配始终覆盖整个字符串。因此,如果希望匹配字符串中任意位置的序列,则模式必须以百分号开头和结尾。
要匹配文本下划线或百分号而不匹配其他字符,pattern 中的相应字符前面必须有转义字符。默认转义字符是反斜杠,但可以使用 ESCAPE 子句选择不同的转义字符。要匹配转义字符本身,请编写两个转义字符。
正则表达式
Postgresql 还支持正则表达式来实现模式匹配。
string SIMILAR TO pattern [ESCAPE escape-character] string NOT SIMILAR TO pattern [ESCAPE escape-character]
SIMILAR TO 运算符返回 true 或 false,具体取决于其模式是否与给定字符串匹配。它与 LIKE 类似,不同之处在于它使用 SQL 标准的正则表达式定义来解释模式。SQL 正则表达式是 LIKE 表示法和通用 (POSIX) 正则表达式表示法之间的奇怪交叉。
与 LIKE 一样,仅当 SIMILAR TO 运算符的模式与整个字符串匹配时,该运算符才会成功;这与常见的正则表达式行为不同,在常见的正则表达式行为中,模式可以匹配字符串的任何部分。与 LIKE 一样,SIMILAR TO 使用 _ 和 % 作为通配符,分别表示任何单个字符和任何字符串(这些字符类似于 POSIX 正则表达式中的 . 和 .*)。
正则使用示例
'abc' SIMILAR TO 'abc' true 'abc' SIMILAR TO 'a' false 'abc' SIMILAR TO '%(b|d)%' true 'abc' SIMILAR TO '(b|c)%' false '-abc-' SIMILAR TO '%\mabc\M%' true 'xabcy' SIMILAR TO '%\mabc\M%' false