Pergunta

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

Aqui está o que tenho atualmente.

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

Que retorna o desejado 123 e 1999, mas fiquei pensando se existe uma maneira melhor.Alguma ideia?

Foi útil?

Solução

Multiplique por 100 e converta para um int.

Outras dicas

Você nunca deve usar o tipo de dados money para armazenar valores monetários.Se você fizer algum cálculo, obterá resultados truncados.Execute o seguinte para ver o que 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

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

Lembre-se de que o tipo de dados money pode ter até 4 dígitos após o decimal.Valores com mais de dois dígitos podem não funcionar conforme o esperado para sua solução original ou para o truque x100.

Aqui está a mágica:

DataFormatString="{0:c0}

Isso removerá as casas decimais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top