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

前端技术 2023/09/09 PostgreSQL

六、模式匹配:

    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)
 

本文地址:https://www.stayed.cn/item/24588

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。