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 LIKENOT 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)


转载自http://www.cnblogs.com/stephen-liu74/archive/2012/05/04/2294643.html

猜你喜欢

转载自blog.csdn.net/qq_24325225/article/details/80054759