PostgreSQL - 正則函數regexp_like


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM