T-SQL Remover ponto decimal Do Dinheiro Tipo de dados

votos
7

Dada a restrição de apenas usando T-SQL no SQL Server 2005, há uma maneira melhor para remover o ponto decimal de um tipo de dados dinheiro do que uma conversão a um varchar (aqui implicitamente) e, em seguida, a substituição do ponto decimal?

Aqui está o que eu tenho atualmente.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

Que retorna o desejado 123 e 1999, mas eu queria saber se havia uma maneira melhor. Alguma ideia?

Publicado 06/08/2008 em 20:34
fonte usuário
Em outras línguas...                            


5 respostas

votos
6

Multiplicar por 100 e depois converter para um int.

Respondeu 06/08/2008 em 20:37
fonte usuário

votos
3

Você nunca deve usar o tipo de dados dinheiro para armazenar valores monetários. Se você fizer os cálculos que você vai obter resultados truncados. Execute o seguinte para ver o que eu quero dizer

DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)

SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000

SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3

SELECT @mon4 AS moneyresult,
@num4 AS numericresult

Saída: 2949.0000 2949.8525

Respondeu 08/08/2008 em 14:53
fonte usuário

votos
0

Aqui é a mágica:

DataFormatString="{0:c0}

Isto irá remover as casas decimais.

Respondeu 20/05/2009 em 07:02
fonte usuário

votos
0

Tenha em mente que o tipo de dados dinheiro pode ter até 4 dígitos após o decimal. Valores com mais de dois dígitos pode não funcionar como esperado para tanto sua solução original ou o truque x100.

Respondeu 06/08/2008 em 21:59
fonte usuário

votos
0

Poderia ser um pouco mais específico sobre o caso de uso? Remover o ponto decimal da representação é um pouco GIVEN incomum que você vai perder todas as informações sobre a escala. Você está assumindo que haverá sempre dois dígitos? Se assim for, você poderia simplificar multiplicar por 100 e depois rodada antes de converter para uma string.

Respondeu 06/08/2008 em 20:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more