如何在PostgreSQL中计算字符串中的数字总和

时间:2018-06-23 02:50:02

标签: string postgresql

1^1^1^5^1|1^1|1^1

有没有一种简单的方法可以将上述所有数字加到postgresql中。我想编写一个接受上述字符串并输出13的函数。

2 个答案:

答案 0 :(得分:3)

您可以使用函数regexp_split_to_table

SELECT sum(s::int) 
  FROM regexp_split_to_table('1^1^1^5^1|1^1|1^1','\D') as s

在这里,您使用正则表达式\D分割不是的所有数字,剩下的就是数字(有关postgres regex的更多信息),然后对其求和作为整数。

答案 1 :(得分:1)

如果您使用的是Postgre 9.3或更高版本,则这里是一个选项:

SELECT SUM(s.num::int) AS sum
FROM your_table t, unnest(string_to_array(replace(t.col::text, '|', '^'), '^')) s(num);

Demo

但是更好的长期解决方法是避免发生此类SQL奥运会,而是对数据进行规范化。理想情况下,您要求和的每个数字都应存储在单独的记录中,这就是上面的查询实际生成总和的作用。