我正在嘗試撰寫一些 postgresql 函式來幫助我決議像“30Gi”或“25Ti”這樣的字串值。我試過這個,但無法正確使用語法,也無法弄清楚第一個函式的回傳型別應該是什么。
CREATE FUNCTION get_matches(VARCHAR) RETURNS ARRAY(VARCHAR) AS
SELECT (regexp_matches ($1, '(\d )([KGTM]i)'));
CREATE FUNCTION get_amount(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches($1)[1];
CREATE FUNCTION get_units(ARRAY(VARCHAR)) RETURNS VARCHAR AS
SELECT get_matches($1)[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 測驗我的功能。
uj5u.com熱心網友回復:
您可以在單個查詢中回傳兩者。以下回傳table有效運算式的 2 列大小和單位。在驗證引數的格式是否正確(通過正則運算式)后,它使用基本相同的 withregexp_replace來回傳每個組件。
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)$', '\1')::integer
, regexp_replace(p_size_units, '^(\d )([KGTM]i)$', '\2')
where p_size_units ~ '^\d [KGTM]i$';
$$;
如果需要,您可以在 select 陳述句中使用結果。(見演示)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/480569.html
