Postgres 函数 return regexp_matches 结果
Postgres function to return regexp_matches result
我正在尝试编写一些 postgresql 函数来帮助我解析像“30Gi”或“25Ti”这样的字符串值。我试过了,但语法不正确,也无法弄清楚第一个函数的 return 类型应该是什么。
CREATE FUNCTION get_matches(VARCHAR) RETURNS ARRAY(VARCHAR) AS
SELECT (regexp_matches (, '(\d+)([KGTM]i)'));
CREATE FUNCTION get_amount(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches()[1];
CREATE FUNCTION get_units(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches()[2];
Postgres 版本:
PostgreSQL 13.2 on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
使用 pgAdmin4 测试我的功能。
您可以在一个查询中同时获得两个 returned。以下 return 是一个 table
的 2 列大小和有效表达式的单位。在验证参数格式正确(通过正则表达式)后,它使用基本相同的 regexp_replace
到 return 每个组件。
create or replace function size_units(p_size_units text)
returns table ( size integer
, units text
)
language sql
as $$;
select regexp_replace(p_size_units, '^(\d+)([KGTM]i)$', '')::integer
, regexp_replace(p_size_units, '^(\d+)([KGTM]i)$', '')
where p_size_units ~ '^\d+[KGTM]i$';
$$;
如果需要,您可以在 select 语句中使用结果。 (参见 demo)。
我正在尝试编写一些 postgresql 函数来帮助我解析像“30Gi”或“25Ti”这样的字符串值。我试过了,但语法不正确,也无法弄清楚第一个函数的 return 类型应该是什么。
CREATE FUNCTION get_matches(VARCHAR) RETURNS ARRAY(VARCHAR) AS
SELECT (regexp_matches (, '(\d+)([KGTM]i)'));
CREATE FUNCTION get_amount(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches()[1];
CREATE FUNCTION get_units(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches()[2];
Postgres 版本:
PostgreSQL 13.2 on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
使用 pgAdmin4 测试我的功能。
您可以在一个查询中同时获得两个 returned。以下 return 是一个 table
的 2 列大小和有效表达式的单位。在验证参数格式正确(通过正则表达式)后,它使用基本相同的 regexp_replace
到 return 每个组件。
create or replace function size_units(p_size_units text)
returns table ( size integer
, units text
)
language sql
as $$;
select regexp_replace(p_size_units, '^(\d+)([KGTM]i)$', '')::integer
, regexp_replace(p_size_units, '^(\d+)([KGTM]i)$', '')
where p_size_units ~ '^\d+[KGTM]i$';
$$;
如果需要,您可以在 select 语句中使用结果。 (参见 demo)。