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

时间:2016-02-10 17:42:02

标签: sql regex string postgresql plpgsql

我的文字如下:

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

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

4545496,5464564,456

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

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

2 个答案:

答案 0 :(得分:1)

使用此:

DistinctErrors = Errors.SelectMany(o => o.References, (o, r) => new {o.Type, r.Name, r.Value})
                       .Distinct()
                       .Count();

执行PL / SQL块

4545496,5464564,456

编辑,我刚注意到Postgres旗帜。你可能意味着PQSQL而不是PLSQL,它是Oracle RDBMS。我希望它的作用相似。

答案 1 :(得分:0)

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