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