2017-07-02 114 views
0

PostgreSQL中是否有一個內置函數來總結從右側開始的另一位數字?PostgreSQL中一個數字中的所有奇數位數總和

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

基本上我要打印的每張備用號碼並如上概括起來,請指教在Postgres的任何解決方案

+1

爲什麼你想在db中這樣做,而不是在應用程序中計算它? – user1937198

+0

因爲我想對卡號 –

回答

2

在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; 

您可以在早期版本中使用子查詢應用相同的想法。

+0

'(length(x) - ord)%2'隨機使用一個數的模10算法來滿足「從右手邊開始」 – Abelisto

+0

@Abelisto的要求。 。 。接得好。我選擇了只是扭轉字符串。 –

+0

@Gordon感謝您的解決方案,我正在檢查它。我在x86_64-pc-linux-gnu上使用PostgreSQL 9.5.2,由gcc(GCC)編譯4.8.2 20140120(Red Hat 4.8.2-16),64位版本 –

相關問題