模式匹配

最近更新时间:2019-04-22 11:05:32

LIKE

数据库支持多种模式匹配方式。第一种就是LIKE或者NOT LIKE。

示例 结果
‘abc’ LIKE ‘abc’ true
‘abc’ LIKE ‘abcz’ false
‘abc’ LIKE ‘a%’ true
‘abc’ LIKE ‘a false
‘abc’ LIKE ‘a_’ false
‘abc’ LIKE ‘a’ false

SIMILAR TO

第二种模式匹配是数据库支持的SIMILAR TO ,使用方式和LIKE相似,不过支持更多的匹配语法,具体见下表格。

语法 描述 示例 结果
| 支持可选的匹配 'abc' SIMILAR TO '%(b|d|c|e)%' True
* 前一个元素0或者多次重复 'abc' SIMILAR TO 'abcd*' True
'abc' SIMILAR TO 'abc*' true - -
'abc' SIMILAR TO 'ab*' false - -
+ 前一个元素1次或者多次重复 'abc' SIMILAR TO 'abc+' True
'abc' SIMILAR TO 'abcc+' false - -

POSIX正则表达式

数据库还支持POSIX正则表达式, 它提供了比LIKE和SIMILAR TO操作符更强大的含义。POSIX正则表达式支持的函数如下表格。

函数 功能 示例 结果
substring(string from pattern) 从string中按照正则pattern截取字符串 substring('foobar' from 'o.b') oob
regexp_replace(source, pattern, replacement [, flags ]) 替换source中匹配的字符串 regexp_replace('foobarbaz', 'b..', 'X') fooXX
regexp_matches(string, pattern [, flags ]) 函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成 regexp_matches('foobarbequebaz', '(bar)(beque)'); {bar,beque}
regexp_split_to_table(string, pattern [, flags ]) 函数把一个POSIX正则表达式模式当作一个定界符来分离一个串 SELECT regexp_split_to_table('the quick brown fox jumped', E'\\s+') ; the quick brown fox jumped
regexp_split_to_array(string, pattern [, flags ]) 和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回 SELECT regexp_split_to_array('the quick brown fox jumped', E'\s+'); {the,quick,brown,fox,jumped}