Pregunta

Dada la restricción de usar únicamente T-Sql en Sql Server 2005, ¿existe una mejor manera de eliminar el punto decimal de un tipo de datos de dinero que una conversión a varchar (aquí implícitamente) y luego reemplazar el punto decimal?

Esto es lo que tengo actualmente.

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

Lo que devuelve los deseados 123 y 1999, pero me preguntaba si había una manera mejor.¿Alguna idea?

¿Fue útil?

Solución

Multiplica por 100 y luego convierte a un int.

Otros consejos

Nunca deberías utilizar el tipo de datos dinero para almacenar valores monetarios.Si realiza algún cálculo, obtendrá resultados truncados.Ejecute lo siguiente para ver a qué me refiero

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

Producción:2949.0000 2949.8525

¿Podrías ser un poco más específico sobre el caso de uso?Quitar el punto decimal de la representación es un poco inusual dado que perderás toda la información sobre la escala.¿Estás asumiendo que siempre habrá dos dígitos?Si es así, puedes simplificar, multiplicar por 100 y luego redondear antes de convertirlo en una cadena.

Tenga en cuenta que el tipo de datos monetario puede tener hasta 4 dígitos después del decimal.Es posible que los valores con más de dos dígitos no funcionen como se esperaba ni para la solución original ni para el truco x100.

Aquí está la magia:

DataFormatString="{0:c0}

Esto eliminará los decimales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top