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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。