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)
    
  • 相关阅读:
    【板子】博弈论
    【洛谷】P1229快速幂
    【洛谷】P1349广义斐波那契
    2018.11.15 Nginx服务器的使用
    2018.11.14 hibernate中的查询优化---关联级别查询
    2018.11.13 Hibernate 中数据库查询中的Criteria查询实例
    2018.11.12 Spring事务的实现和原理
    2018.11.11 Java的 三大框架:Struts+Hibernate+Spring
    2018.11.10 Mac设置Eclipse的 .m2文件夹是否可见操作&&Mac系统显示当前文件夹的路径设置
    2018.11.9 Dubbo入门学习
  • 原文地址:https://www.cnblogs.com/lottu/p/13628185.html
Copyright © 2011-2022 走看看