PostgreSQL教程(六):函数和操作符详解(2)
六、模式匹配:
PostgreSQL中提供了三种实现模式匹配的方法:SQLLIKE操作符,更近一些的SIMILARTO操作符,和POSIX-风格正则表达式。
1.LIKE:
stringLIKEpattern[ESCAPEescape-character] stringNOTLIKEpattern[ESCAPEescape-character]
每个pattern定义一个字串的集合。如果该string包含在pattern代表的字串集合里,那么LIKE表达式返回真。和我们想象的一样,如果LIKE返回真,那么NOTLIKE表达式返回假,反之亦然。在pattern里的下划线(_)代表匹配任何单个字符,而一个百分号(%)匹配任何零或更多字符,如:
'abc'LIKE'abc' true 'abc'LIKE'a%' true 'abc'LIKE'_b_' true 'abc'LIKE'c' false
要匹配文本的下划线或者百分号,而不是匹配其它字符,在pattern里相应的字符必须前导转义字符。缺省的转义字符是反斜杠,但是你可以用ESCAPE子句指定一个。要匹配转义字符本身,写两个转义字符。我们也可以通过写成ESCAPE''的方式有效地关闭转义机制,此时,我们就不能关闭下划线和百分号的特殊含义了。
关键字ILIKE可以用于替换LIKE,令该匹配就当前的区域设置是大小写无关的。这个特性不是SQL标准,是PostgreSQL的扩展。操作符~~等效于LIKE,而~~*对应ILIKE。还有!~~和!~~*操作符分别代表NOTLIKE和NOTILIKE。所有这些操作符都是PostgreSQL特有的。
2.SIMILARTO正则表达式:
SIMILARTO根据模式是否匹配给定的字符串而返回真或者假。
stringSIMILARTOpattern[ESCAPEescape-character] stringNOTSIMILARTOpattern[ESCAPEescape-character]
它和LIKE非常类似,支持LIKE的通配符('_'和'%')且保持其原意。除此之外,SIMILARTO还支持一些自己独有的元字符,如:
1).|标识选择(两个候选之一)。
2).*表示重复前面的项零次或更多次。
3).+表示重复前面的项一次或更多次。
4).可以使用圆括弧()把项组合成一个逻辑项。
5).一个方括弧表达式[...]声明一个字符表,就像POSIX正则表达式一样。
见如下示例:
'abc'SIMILARTO'abc' true 'abc'SIMILARTO'a' false 'abc'SIMILARTO'%(b|d)%' true 'abc'SIMILARTO'(b|c)%' false
带三个参数的substring,substring(stringfrompatternforescape-character),提供了一个从字串中抽取一个匹配SQL正则表达式模式的子字串的函数。和SIMILARTO一样,声明的模式必须匹配整个数据串,否则函数失效并返回NULL。为了标识在成功的时候应该返回的模式部分,模式必须出现后跟双引号(")的两个转义字符。匹配这两个标记之间的模式的字串将被返回,如:
MyTest=#SELECTsubstring('foobar'from'%#"o_b#"%'FOR'#');--这里#是转义符,双引号内的模式是返回部分。
substring ----------- oob (1row) MyTest=#SELECTsubstring('foobar'from'#"o_b#"%'FOR'#'); --foobar不能完全匹配后面的模式,因此返回NULL。 substring -----------
(1row)