反转sql中的数字和数字之和

时间:2018-03-22 19:29:08

标签: sql

在sql数据库中我有一个表。其中我的列A是十进制(18,0)类型。

A
34
123
345
879

我需要列B和C,就像这样

B      C
43     7
321    6 
543    12
978    24

2 个答案:

答案 0 :(得分:1)

对于Postgres,您可以使用string_to_array()将数字拆分为数字:

with data (a) as (
  values
    (34),
    (123),
    (345),
    (879)
)
select a, 
       string_agg(t.d::text, '' order by t.idx desc) as b, 
       sum(t.d::int) as c
from data, 
     unnest(string_to_array(a::text,null)) with ordinality as t(d, idx)
group by a;

以上回报:

a   | b   | c 
----+-----+---
 34 | 43  |  7
123 | 321 |  6
345 | 543 | 12
879 | 978 | 24

要获得反转的数字,您还可以在Postgres中使用reverse()

答案 1 :(得分:1)

  

在Oracle中,可以按照以下方式完成 -

SELECT 
    VALUE, REVERSE_VALUE, SUM(SUM_TOT) AS SUM 
FROM (
        SELECT 
            DISTINCT A AS VALUE, REVERSE(TO_CHAR(A)) AS REVERSE_VALUE, SUBSTR(TO_CHAR(A), LEVEL, 1) AS SUM_TOT 
        FROM (
                SELECT 34 AS A FROM DUAL
                UNION
                SELECT 123 FROM DUAL
                UNION
                SELECT 345 FROM DUAL
                UNION
                SELECT 879 FROM DUAL
            )
        CONNECT BY LEVEL <= LENGTH(TO_CHAR(A))
        ORDER BY 1
    )
GROUP BY 
    VALUE, REVERSE_VALUE
;
  

输出 -

VALUE|REVERSE_VALUE|SUM
34|43|7
345|543|12
123|321|6
879|978|24