Usuário com melhor resposta
ajuda com query formatar money

Pergunta
-
alguem poderia me ajudar rapidinho ,to com um problema ao formatar money
minha query é essa ela funciona só que o valor total no caso o " SUM(CAST(produtos.avista AS MONEY)) / 100 AS total "
ta me retornando assim 122,0000 por exemplo gostaria que alem dele formatar para 122,00 ele verificasse quando fosse 1.220,00 e colocasse o ponto.
os valores no banco ta sendo armazenado em nvarchar assim 120,00 .
alguem pode me ajudar?SELECT SUM(CAST(produtos.avista AS MONEY)) / 100 AS total, produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista,
CONVERT(nvarchar(150), produtos.fotoprincipal) AS fotoprincipal, carrinho.IP, carrinho.codigoproduto, carrinho.cores AS corescolhida,
carrinho.tamanhos AS tamanhoescolhido, carrinho.sabores AS saborescolhido, empresa.email_pagseguro, COUNT(produtos.id) AS quantidade
FROM produtos INNER JOIN
carrinho ON carrinho.codigoproduto = produtos.id INNER JOIN
empresa ON empresa.id = produtos.id_empresa
GROUP BY produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista, CONVERT(nvarchar(150), produtos.fotoprincipal),
carrinho.IP, carrinho.codigoproduto, carrinho.cores, carrinho.tamanhos, carrinho.sabores, empresa.email_pagseguro
ORDER BY quantidade DESC
Respostas
-
Boa tarde Jeferson,
Segue um exemplo:
select REPLACE(CAST(CAST(1555005.3333 as money)/100 as numeric(10,2)),'.',',') as total
No seu caso ficaria mais ou menos assim:
SELECT REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10,2)),'.',','), produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista,
CONVERT(nvarchar(150), produtos.fotoprincipal) AS fotoprincipal, carrinho.IP, carrinho.codigoproduto, carrinho.cores AS corescolhida,
carrinho.tamanhos AS tamanhoescolhido, carrinho.sabores AS saborescolhido, empresa.email_pagseguro, COUNT(produtos.id) AS quantidade
FROM produtos INNER JOIN
carrinho ON carrinho.codigoproduto = produtos.id INNER JOIN
empresa ON empresa.id = produtos.id_empresa
GROUP BY produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista, CONVERT(nvarchar(150), produtos.fotoprincipal),
carrinho.IP, carrinho.codigoproduto, carrinho.cores, carrinho.tamanhos, carrinho.sabores, empresa.email_pagseguro
ORDER BY quantidade DESCEspero ter ajudado, se for o caso, marque como útil e como resposta.
Até mais.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
-
Entendi, então como o Marcelo citou, vocë terá que desenvolver uma função ou algo do tipo para fazer este tratamento. Poderá usar a logica que você postou (SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 1, 1) + '.' + SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 2, 100) AS valorcontrato FROM (SELECT SUM(CAST(valorcontrato AS MONEY)) / 100) conseguir o resultado que precisa.
Espero ter ajudado, se for o caso, marque como útil e como resposta.
Até mais.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
-
Segue um exemplo de como tratar isso:
declare @avista nvarchar(10)
set @avista = '1.230,00'
select REPLACE(REPLACE(@avista,'.',''),',','.')
select REPLACE(CAST(SUM(CAST(REPLACE(REPLACE(@avista,'.',''),',','.') AS MONEY)) / 100 AS NUMERIC(10,2)),'.',',') AS totalEspero ter ajudado, se for o caso, marque como útil e como resposta.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
Todas as Respostas
-
Jefferson
Até é possível fazer isto no SQL, mas vc vai ter que criar uma função e tal.. e quem vai pagar a conta será a performance.
A melhor solução é a sua aplicação fazer isto.... la será mais simples e com menor custo.
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
Boa tarde Jeferson,
Segue um exemplo:
select REPLACE(CAST(CAST(1555005.3333 as money)/100 as numeric(10,2)),'.',',') as total
No seu caso ficaria mais ou menos assim:
SELECT REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10,2)),'.',','), produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista,
CONVERT(nvarchar(150), produtos.fotoprincipal) AS fotoprincipal, carrinho.IP, carrinho.codigoproduto, carrinho.cores AS corescolhida,
carrinho.tamanhos AS tamanhoescolhido, carrinho.sabores AS saborescolhido, empresa.email_pagseguro, COUNT(produtos.id) AS quantidade
FROM produtos INNER JOIN
carrinho ON carrinho.codigoproduto = produtos.id INNER JOIN
empresa ON empresa.id = produtos.id_empresa
GROUP BY produtos.id, produtos.id_empresa, produtos.id_subcategoria, produtos.Nome, produtos.avista, CONVERT(nvarchar(150), produtos.fotoprincipal),
carrinho.IP, carrinho.codigoproduto, carrinho.cores, carrinho.tamanhos, carrinho.sabores, empresa.email_pagseguro
ORDER BY quantidade DESCEspero ter ajudado, se for o caso, marque como útil e como resposta.
Até mais.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
-
-
certa vez fiz algo parecido com isso em outra situação e funcionou
SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 1, 1) + '.' + SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 2, 100) AS valorcontrato FROM (SELECT SUM(CAST(valorcontrato AS MONEY)) / 100
só que tentei adaptar e apanhei de 10 a 0 pro código ;x
-
Olá Jeferson,
Desculpe a demora, a questão da "máscara" seria melhor analisar qual é objetivo da consulta. Ela será usada em alguma aplicação?
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
-
Entendi, então como o Marcelo citou, vocë terá que desenvolver uma função ou algo do tipo para fazer este tratamento. Poderá usar a logica que você postou (SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 1, 1) + '.' + SUBSTRING(CAST(REPLACE(valorcontrato, '.', ',') AS VARCHAR), 2, 100) AS valorcontrato FROM (SELECT SUM(CAST(valorcontrato AS MONEY)) / 100) conseguir o resultado que precisa.
Espero ter ajudado, se for o caso, marque como útil e como resposta.
Até mais.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
-
apesar de estar quase -la encontrei mais um problema! se meu valor é inserido 134,00 funciona bonitinho só que se ele tem 1.533,00 (ponto).
o valor
REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10, 2)), '.', ',') AS total, me retornou 0,02 .
ferrou! porque isso ?
o.O
-
apesar de estar quase -la encontrei mais um problema! se meu valor é inserido 134,00 funciona bonitinho só que se ele tem 1.533,00 (ponto).
o valor
REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10, 2)), '.', ',') AS total, me retornou 0,02 .
ferrou! porque isso ?
o.O
estava lendo a respeito de formatar via código mesmo mas não contava com esse erro! -
armazeno eles em nvarchar 12,00 , 140,00 1.440,00 ... ae faço uma função onde ele soma os valores duplicados ou seja do mesmo produto REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10, 2)), '.', ',') AS total ae o que acontece o meu total de 12,00 + 12,00 ele traz 24,00 só que o meu total de 1.440,00 + 1.440,00 ele traz valor errado. o Ponto deve ta causando algum problema sempre que o valor obtem ponto ele gera o erro na soma!
-
Jeferson, acontece o seguinte:
Ao converter os valores textos em numericos, o SQL não entende o formato, visto que o ponto é o separador das casas decimais e a virgula não pertence a este formato.
Uma boa pratica de programação seria que a coluna fosse um numerico e quando preciso, converse em texto para a exibição na sua aplicação.
No seu caso, você terá que tratar para que os registros desta coluna, na conversão de texto para numerico, para retire os pontos e a virgula mude para o ponto no caso de separar as casas decimais. Ex: Valor texto: 1.355,00 -> converte para numerico: 1355.00.
Desta forma você terá o resultado esperado.
Espero ter ajudado, se for o caso, marque como útil e como resposta.
Até mais.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
então era o que eu estava tentando o problema é que eu preciso fazer essa remoção do ponto aqui
REPLACE(CAST(SUM(CAST(produtos.avista AS MONEY)) / 100 AS NUMERIC(10, 2)), '.', ',') AS total
antes dele fazer isso ele remover o ponto substitur por nada por exemplo assim ele traria 1230,00 e o meu codigo somaria certinho ae depois em c# eu ia dar um jeito de incluir o ponto.
ja tentei fazer replaces ali e não consegui!
-
Segue um exemplo de como tratar isso:
declare @avista nvarchar(10)
set @avista = '1.230,00'
select REPLACE(REPLACE(@avista,'.',''),',','.')
select REPLACE(CAST(SUM(CAST(REPLACE(REPLACE(@avista,'.',''),',','.') AS MONEY)) / 100 AS NUMERIC(10,2)),'.',',') AS totalEspero ter ajudado, se for o caso, marque como útil e como resposta.
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta Jeferson Medeiros sábado, 27 de agosto de 2011 16:57
-