1^1^1^5^1|1^1|1^1
有没有一种简单的方法可以将上述所有数字加到postgresql中。我想编写一个接受上述字符串并输出13的函数。
答案 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);
但是更好的长期解决方法是避免发生此类SQL奥运会,而是对数据进行规范化。理想情况下,您要求和的每个数字都应存储在单独的记录中,这就是上面的查询实际生成总和的作用。