2009-03-12 11 views
7

Quiero convertir un tipo de datos de dinero en un decimal, porque quiero registrar los resultados en 8 decimales.En SQL, ¿cómo puedo convertir un tipo de datos money a decimal?

Por ejemplo, en una tabla de tasas de cambio, veo la tasa almacenada como 2871047428.20 como un tipo de datos de dinero; usando Microsoft SQL Management Studio, quiero dividir eso por 10000000 para lograr el resultado 287.10474282; sin embargo, el resultado que estoy obteniendo es 287.1047.

Creo que la razón por la que estoy recibiendo sólo los 4 decimales se debe a que se trata de dinero tipo de datos, y por lo tanto creo que el camino a seguir es la de convertir a un tipo de datos decimal ....

Respuesta

7

Aquí una comparación columna izquierda el valor decimal, columna derecha el valor calculado de dinero:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST(@money AS decimal(34,4))/10000000, @money/10000000 

Ver también aquí en desbordamiento de pila:

+1

Gracias estoy ahora progresando, pero no puedo usar el comando SET porque he usado 2871047428.20 como ejemplo. Es un tipo de cambio de moneda que varía de acuerdo con el código de moneda real (por ejemplo, EUR, USD, etc.) y tendrá que recoger las últimas tasas de cambio de la tabla .... –

+0

SELECCIONE @exchangeReate = ... FROM ExchangeRate .. . - Por cierto: puede votar y/o aceptar si ayuda a encontrar la solución. ;-) – splattne

+0

Hola, estoy avanzando un poco más pero todavía no funciona correctamente: - DECLARAR @exchangeRate COMO dinero SELECCIONAR @exchangeRate = CAST (Rate AS decimal (34,4))/10000000 FROM ... Is esta sintaxis ¿verdad? Sí, votaré más tarde, gracias de nuevo. –

0
SELECT CAST(currency_rate AS decimal)/10000000 FROM ... 
0

de splattne es casi correcta, a excepción de dos pequeños cambios:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST(@money AS decimal(34,6))/10000000.0, @money/10000000.0 

Esto le dará la respuesta correcta: 287.10474282. Lo que hice fue cambiar el valor de precisión y agregar el ".0" al valor de división.

Lo único que me desconcierta en este momento es el hecho de que tengo que convertir el valor como decimal (34,6) en lugar del decimal esperado (34,8).

Así, escribí la consulta de otro modo, lo que hace más sentido para mí:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST((@money/10000000.0) AS decimal(34,8)), @money/10000000.0 

favor ver cuál funciona para usted.

0

Eres todo rarezas que golpean de una división decimal Aquí está mi respuesta a another thread, T-SQL Decimal Division Accuracy

y puede que tenga conversiones implícitas flotador también a causa de data type precedence si utiliza 10000000,0

DECLARE @money AS money 
SET @money = 2871047428.20 
--Oddities 
SELECT 
    CAST(@money AS decimal(34,8))/10000000, 
    CAST(@money AS decimal(34,8))/10000000.0, 
    CAST(@money AS decimal(34,8))/10000000.00, 
    CAST(@money AS decimal(34,8))/10000000.000, 
    CAST(@money AS decimal(34,8))/10000000.0000 
--Should be safe. My brain hurts if I work through p and s 
SELECT 
    CAST(@money AS decimal(38,8))/CAST(10000000 AS decimal(8,0)) 
Cuestiones relacionadas