一、模式匹配
pg中提供3种模式匹配的方法:传统SQL LIKE 操做;最近的SIMILAR TO操做(1999添加到SQL);POSIX-style正则表达式。
函数可用来提取or替换一个匹配的子字符串从匹配的位置。若你有超越这种模式匹配的需求,能够考虑在Perl或Tcl中写一个自定义的函数。
1.一、传统SQL LIKE 操做
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
若string匹配提供的pattern,则like表达式返回true,NOT与之相反。
若pattern中不含有"%" 或"_"符号,则pattern仅仅表明string本身,这种状况下LIKE操做符就像等于操做符。
"_":匹配任何单个字符
"%":匹配任何序列的0个或多个字符
如:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
LIKE模式匹配老是涉及整个字符串,所以,若想要匹配一个字符串中任何一个序列,则该pattern须要以"%"开始和结尾。
匹配字面的"%" 或"_"符号,经过在pattern中使用escape字符(转义字符),默认的转义字符是一个"\",但也可使用ESCAPE从句。为匹配escape字符自己,须要写2个escape字符。
也能够经过写 ESCAPE ''来选择no escape字符,这将有效的禁止escape机制,从而使它不可能关掉"%" 或"_"符号的特殊意义。
关键字ILIKE能够替换LIKE,根据活动的地区使得大小写不敏感。此不是SQL标准倒是PG扩展
"~~" 等价于 LIKE;"~~*" 等价于 ILIKE("!~~"/"!~~*"表明NOT LIKE 和NOT ILIKE)
1.二、SIMILAR TO正则表达式
string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]
相似于LIKE,除了它解析pattern使用SQL标准正则表达式外,SQL正则表达式在LIKE符号和通用正则表达式符号之上。
只有它的pattern匹配整个字符串时,该SIMILAR TO成功。这是不一样于常见的正则表达式的行为模式能够匹配任何字符串的一部分。也像LIKE,SIMILAR TO 使用"%" 或"_"符号做为一个通配符表明任何字符串or单个字符。
除了借用了LIKE的这些特性, SIMILAR TO 借用POSIX正则表达式支持模式匹配的通配符:
| 2个选择中的任何一个
* 重复前一个项0次or更屡次
+ 重复前一个项1次or更屡次
? 重复前一个项0次or 1次
{m} 重复前一个项m次
{m,} 重复前一个项m次or更屡次
{m,n} 重复前一个项至少m次,不超过n次
Parentheses() 组合项到一个逻辑项
[...] 指明一个字符类,就像在POSIX正则表达式里的同样
如:
'abc' SIMILAR TO 'abc' true
'abc' SIMILAR TO 'a' false
'abc' SIMILAR TO '%(b|d)%' true
'abc' SIMILAR TO '(b|c)%' false正则表达式
substring(string from pattern for escape-character),提供抽取匹配SQL正则表达式的子字符串函数,与使用SIMILAR TO同样,指定的pattern必须匹配整个字符串,
不然函数失败并返回null,返回标识模式的一部分表示成功,pattern必须包含2个出现的escape字符紧随其后的是一个双引号",文本匹配模式的一部分返回这些标记之间。
如:#"限制返回字符串
substring('foobar' from '%#"o_b#"%' for '#') oob
substring('foobar' from '#"o_b#"%' for '#') NULL函数
1.三、POSIX-style正则表达式字符串
正则表达式匹配操做符:
操做符 描述 例子
~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*'
~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*'
!~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*'
!~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*'
POSIX正则表达式为模式匹配提供比使用LIKE和SIMILAR TO更强大的方式。
正则表达式是一个缩写的定义一组字符串的一个字符序列string