在 PostgreSQL 中对一个数字中的所有奇数求和

Sum all odd digits in a number in PostgreSQL

PostgreSQL 中是否有一个内置函数来对从右手边开始的交替数字求和?

Input: 890400021003
Output:
3 + 0 + 2 + 0 + 4 + 9 = 18 
0 + 1 + 0 + 0 + 0 + 8 = 9 

基本上我想打印每个备用数字并按上面的方式求和,请在 Postgres 中提供任何解决方案

在 Postres 9.4 中,您可以使用字符串轻松完成此操作,使用 string_to_array()unnest() with ordinality:

select ord % 2, sum(val::numeric)
from (select reverse('890400021003'::text) as x) x, lateral
     unnest(string_to_array(x, NULL)) with ordinality u(val, ord)
group by ord % 2;

在 9.3 中,您可以使用横向连接来执行此操作:

select i % 2, sum(substring(x.x, g.i, 1)::numeric)
from (select reverse('890400021003'::text) as x) x, lateral
     generate_series(1, length(x.x)) g(i)
group by i % 2;

您可以在早期版本中使用子查询来应用相同的想法。