在 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;
您可以在早期版本中使用子查询来应用相同的想法。
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;
您可以在早期版本中使用子查询来应用相同的想法。