none
Converter varchar(10) para numero para realizar somas RRS feed

  • Pergunta

  • Bom dia, estou com um problema de tratamento de dados importados.

    Na importaçao dos dados, a coluna valor_euros ficou como varchar(10), onde o ponto (.) separa as casas decimais.

    -00000000000.33

    00000000010.31

    Quando tento somar, dá erro porque não reconhecer como numero.

    SEELECT

           a.rubrica,

           b.Nova_classificacaoUE,

    sum(cast(replace(a.[valor_euros],'.',',') as decimal(18,2))) as total

    FROM

           [dbo].[FKM151_D180105.T1800_79 a 84_ 2015] AS a

           INNER JOIN [dbo].[Cliente_classificacaoUE_unica_final_2018.01.16] AS b

                 ON a.N_CLIENTE=b.N_CLIENTE

    GROUP BY a.[rubrica], b.Nova_classificacaoUE


    • Editado MS_22222 quarta-feira, 17 de janeiro de 2018 12:23
    quarta-feira, 17 de janeiro de 2018 12:21

Respostas

Todas as Respostas

  • Você não precisa fazer o REPLACE antes do CAST. O separador de decimal é o ponto. 

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 17 de janeiro de 2018 12:26
  • Deleted
    quarta-feira, 17 de janeiro de 2018 13:47
  • Vou te mandar um exemplo que creio, vai ajudar no que precisa fazer.

    declare @n varchar(10)
    set @n = '0125,63'

    print convert(decimal(18,2),replace(@n,',','.'))

    quarta-feira, 17 de janeiro de 2018 15:44
  • Obrigado a todos.

    Desculpe a ignorância, mas devo colocar este exemplo antes do SELECT? E, assim, no somatório vem apenas valor_euros em vez do CAST? Isto é:

    declare @valor_euros varchar(10)
    set @valoreuros = '0125,63'

    print convert(decimal(18,2),replace(@valor_euros,',','.'))

    SEELECT

           a.rubrica,

           b.Nova_classificacaoUE,

    sum(valor_euros) as total

    FROM

           [dbo].[FKM151_D180105.T1800_79 a 84_ 2015] AS a

           INNER JOIN [dbo].[Cliente_classificacaoUE_unica_final_2018.01.16] AS b

                 ON a.N_CLIENTE=b.N_CLIENTE

    GROUP BY a.[rubrica], b.Nova_classificacaoUE

    quarta-feira, 17 de janeiro de 2018 17:45
  • Continua a dar erro. Mas obrigada de qualquer forma!
    quarta-feira, 17 de janeiro de 2018 17:45
  • Deleted
    quarta-feira, 17 de janeiro de 2018 20:31
  • Boa noite,

    O resultado depois de aplicar o declare @valor_euros alterou o ponto para virgula mas o somatório continua a dizer que não permite fazer porque é varchar.

    varchar(10)   varchar(14)         varchar(17)

    n_cliente        rubrica                  valor_euros

    0099101010       77766611111111                    -0000000000030,00

    0099101010      77766611111111                    -0000000000000,12

    0099101010       77766611111111                    -0000000000028,73

    0099101010       77766611111111                    -0000000000002,03

    0099101010       77766611111111                    -0000000000033,02

    0099101010       77766611111111                    -0000000000042,70

    0099101010       77766611111111                    -0000000000037,88

    0099101010       77766611111111                    -0000000000001,68

    0099101010       77766611111111                    -0000000000016,33

    0099101010       77766611111111                    -0000000000023,33

    quarta-feira, 17 de janeiro de 2018 21:27
  • Deleted
    quarta-feira, 17 de janeiro de 2018 21:50
  • sim, exatamente
    quarta-feira, 17 de janeiro de 2018 21:54
  • Deleted
    quarta-feira, 17 de janeiro de 2018 22:07
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 23 de janeiro de 2018 18:40
    Moderador
  • Funcionou na perfeição. Sou iniciante :) desculpem
    quarta-feira, 28 de fevereiro de 2018 16:57