PostgreSQL教程(六):函数和操作符详解(2)

六、模式匹配:

    PostgreSQL中提供了三种实现模式匹配的方法:SQL LIKE操作符,更近一些的SIMILAR TO操作符,和POSIX-风格正则表达式。

    1. LIKE:

 

    string LIKE pattern [ ESCAPE escape-character ]

    string NOT LIKE pattern [ ESCAPE escape-character ]

 


    每个pattern定义一个字串的集合。如果该string包含在pattern代表的字串集合里,那么LIKE表达式返回真。和我们想象的一样,如果LIKE返回真,那么NOT LIKE表达式返回假,反之亦然。在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。还有!~~和!~~*操作符分别代表NOT LIKE和NOT ILIKE。所有这些操作符都是PostgreSQL特有的。

    2. SIMILAR TO正则表达式:

    SIMILAR TO根据模式是否匹配给定的字符串而返回真或者假。

 

    string SIMILAR TO pattern [ESCAPE escape-character]

    string NOT SIMILAR TO pattern [ESCAPE escape-character]

 


    它和LIKE非常类似,支持LIKE的通配符('_'和'%')且保持其原意。除此之外,SIMILAR TO还支持一些自己独有的元字符,如:   

    1). | 标识选择(两个候选之一)。

    2). * 表示重复前面的项零次或更多次。

    3). + 表示重复前面的项一次或更多次。

    4). 可以使用圆括弧()把项组合成一个逻辑项。

    5). 一个方括弧表达式[...]声明一个字符表,就像POSIX正则表达式一样。

    见如下示例:

 

    'abc' SIMILAR TO 'abc'           true

    'abc' SIMILAR TO 'a'              false

    'abc' SIMILAR TO '%(b|d)%'  true

    'abc' SIMILAR TO '(b|c)%'     false

 


    带三个参数的substring,substring(string from pattern for escape-character),提供了一个从字串中抽取一个匹配SQL正则表达式模式的子字串的函数。和SIMILAR TO一样,声明的模式必须匹配整个数据串,否则函数失效并返回NULL。为了标识在成功的时候应该返回的模式部分,模式必须出现后跟双引号(")的两个转义字符。匹配这两个标记之间的模式的字串将被返回,如:

    MyTest=# SELECT substring('foobar' from '%#"o_b#"%' FOR '#'); --这里#是转义符,双引号内的模式是返回部分。

 

     substring

    -----------

     oob

    (1 row)

    MyTest=# SELECT substring('foobar' from '#"o_b#"%' FOR '#');  --foobar不能完全匹配后面的模式,因此返回NULL。

     substring

    -----------

    (1 row)

 

以上是 PostgreSQL教程(六):函数和操作符详解(2) 的全部内容, 来源链接: utcz.com/z/325886.html

回到顶部