从 PL/pgSQL 中的字符串中提取数字部分

Extract numeric part from a string in PL/pgSQL

我有这样的文字:

FHUGBGH(4545496),DFHGUFG(5464564),GFUEIFG(456)

我想删除所有非数字字符并用逗号连接结果数字。输出应该是:

4545496,5464564,456

没有括号或任何东西,只有用逗号分隔的数字部分。

我尝试使用 replaceregexp_replace 等,但没有成功。

使用这个:

declare
   l_text      varchar2 (100) := 'FHUGBGH(4545496),DFHGUFG(5464564),GFUEIFG(456)';
begin
   dbms_output.put_line (regexp_replace (l_text, '[^,0-9]', ''));
end;

PL/SQL 块已执行

4545496,5464564,456

编辑,我刚刚注意到 Postgres 标志。您可能指的是 PQSQL 而不是 PLSQL,它是 Oracle RDBMS。我希望它能起到类似的作用。

PL/pgSQL 或只是普通的 SQL,表达式是相同的。使用 regexp_replace():

如果每串数字之间只保证有一个逗号,而其他任何地方都没有:

regexp_replace (txt, '[^\d,]', '', 'g')

如果我们不能依赖它:

trim(regexp_replace (txt, '\D+', ',', 'g'), ',')

\d .. class shorthand for \[\[:digit:\]\] - 只有数字
\D .. 对方:[^[:digit:]] - 除数字外的所有内容
'g' .. 第四个参数 需要 来替换“全局”而不仅仅是第一个匹配项。

演示:

SELECT regexp_replace (txt, '[^\d,]', '', 'g')          AS nr1
     , trim(regexp_replace (txt, '\D+', ',', 'g'), ',') AS nr2
FROM  (VALUES ('FHUGBGH(4545496),DFHGUFG(5464564),GFUEIFG(456)')) t(txt);