zoukankan      html  css  js  c++  java
  • PostgreSQL

    在 Oracle 中 regexp_like 只能用于条件表达式,和 like 类似;而在 PostgreSQL 没有regexp_like 函数;与之等价的函数有 regexp_match

    一、regexp_match

    regexp_match(string, pattern[, flags ])函数返回一个从匹配POSIX正则表达式模式中获取的所有子串结果的text数组。参数flags是一个可选的text字符串,含有0或者更多单字母标记来改变函数行为。标记g导致查找字符串中的每个匹配,而不仅是第一个,每个匹配返回一行

    示例:

    lottu=> select regexp_match('Abcde1','a[a-z]+');
     regexp_match 
    --------------
     
    (1 row)
    lottu=> select regexp_match('Abcde1','a[a-z]+', 'i');
     regexp_match 
    --------------
     {Abcde}
    (1 row)
    lottu=> select regexp_match('Abcde1','A[a-z]+');
     regexp_match 
    --------------
     {Abcde}
    (1 row)
    

    二、 regexp_like

    若觉得使用regexp_match不舒适的;根据上面 regexp_match 函数;构建出 PostgreSQL;

    CREATE OR REPLACE FUNCTION "lottu"."regexp_like"("regexp_var" text, "pattern" text)
      RETURNS "pg_catalog"."bool" AS $BODY$
        /***********************************************************
         名称: regexp_like
         功能描述:构建regexp_like函数
         修订记录:
         版本号 编辑时间 编辑人 修改描述
         ***********************************************************/
    DECLARE
        var text := regexp_var;
        v_parttern text := pattern;
        vc_result boolean := FALSE;
    BEGIN
        IF (regexp_match(var, v_parttern) IS NOT NULL) THEN
            vc_result := TRUE;
        END IF;
        RETURN vc_result;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    CREATE OR REPLACE FUNCTION regexp_like(regexp_var text, pattern text, match_parameter text)
      RETURNS pg_catalog.bool AS $BODY$
        /***********************************************************
         名称: regexp_like
         功能描述:构建regexp_like函数
         修订记录:
         版本号 编辑时间 编辑人 修改描述
         ***********************************************************/
    DECLARE
        var text := regexp_var;
    	v_parttern text := pattern;
    	v_math text := match_parameter
        vc_result boolean := FALSE;
    BEGIN
        IF (regexp_match(var, v_parttern, v_math) IS NOT NULL) THEN
            vc_result := TRUE;
        END IF;
        RETURN vc_result;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    

    示例

    lottu=> select regexp_like('Abcde1','a[a-z]+');
     regexp_like 
    -------------
     f
    (1 row)
    lottu=> select regexp_like('Abcde1','a[a-z]+', 'i');
     regexp_like 
    -------------
     t
    (1 row)
    lottu=> select regexp_like('Abcde1','A[a-z]+');
     regexp_like 
    -------------
     t
    (1 row)
    
  • 相关阅读:
    闭包
    递归 斐波那契
    作用域,函数的四种调用模式
    数组方法
    Math内置对象
    BeanUtils.copyProperties() 用法
    ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("Id",getId())防止内存泄漏
    Spring配置文件applicationContext.xml Hibernate SQL方言 (hibernate.dialect)
    Redis面试总结
    Nginx面试题
  • 原文地址:https://www.cnblogs.com/lottu/p/13628185.html
Copyright © 2011-2022 走看看