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)
    
  • 相关阅读:
    mq/mysql/redis/nginx常见服务&工具安装
    中断——中断描述符表的定义和初始化(二) (基于3.16-rc4)
    中断——中断描述符表的定义和初始化(一) (基于3.16-rc4)
    linux内核中与进程相关的数据结构(基于linux3.16-rc4)
    内核链表的应用
    ubuntu下做柯老师lab19-lab20实验问题总结
    在ns2.35中添加myevalvid框架
    在ns2.35下完成柯老师lab18实验
    windows编程socket问题
    如何高效利用GitHub
  • 原文地址:https://www.cnblogs.com/lottu/p/13628185.html
Copyright © 2011-2022 走看看