从 PL/pgSQL 中的字符串中提取数字部分
Extract numeric part from a string in PL/pgSQL
我有这样的文字:
FHUGBGH(4545496),DFHGUFG(5464564),GFUEIFG(456)
我想删除所有非数字字符并用逗号连接结果数字。输出应该是:
4545496,5464564,456
没有括号或任何东西,只有用逗号分隔的数字部分。
我尝试使用 replace
、regexp_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);
我有这样的文字:
FHUGBGH(4545496),DFHGUFG(5464564),GFUEIFG(456)
我想删除所有非数字字符并用逗号连接结果数字。输出应该是:
4545496,5464564,456
没有括号或任何东西,只有用逗号分隔的数字部分。
我尝试使用 replace
、regexp_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);