PostgreSQL中是否有一個內置函數來總結從右側開始的另一位數字?PostgreSQL中一個數字中的所有奇數位數總和
Input: 890400021003
Output:
3 + 0 + 2 + 0 + 4 + 9 = 18
0 + 1 + 0 + 0 + 0 + 8 = 9
基本上我要打印的每張備用號碼並如上概括起來,請指教在Postgres的任何解決方案
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;
您可以在早期版本中使用子查詢應用相同的想法。
'(length(x) - ord)%2'隨機使用一個數的模10算法來滿足「從右手邊開始」 – Abelisto
@Abelisto的要求。 。 。接得好。我選擇了只是扭轉字符串。 –
@Gordon感謝您的解決方案,我正在檢查它。我在x86_64-pc-linux-gnu上使用PostgreSQL 9.5.2,由gcc(GCC)編譯4.8.2 20140120(Red Hat 4.8.2-16),64位版本 –
爲什麼你想在db中這樣做,而不是在應用程序中計算它? – user1937198
因爲我想對卡號 –