Usar datos monetarios

Microsoft SQL Server almacena datos de moneda (valores de moneda) mediante dos tipos de datos: money y smallmoney. Estos tipos de datos pueden usar alguno de los siguientes símbolos de moneda.

Tabla de símbolos de moneda, valores hexadecimales

No es necesario incluir los datos de moneda entre comillas simples ('). Es importante recordar que aunque es posible especificar valores monetarios precedidos de un símbolo de moneda, SQL Server no almacena ninguna información de moneda asociada con el símbolo, sólo almacena el valor numérico. Por ejemplo, para asignar un valor de 100 dólares a una variable, puede hacer lo siguiente:

DECLARE @dollars AS money
SET @dollars = $100
SELECT @dollars

El valor devuelto es 100.0000 sin símbolo de moneda.

Si un objeto se define como money, puede tener un máximo de 19 dígitos y 4 de ellos pueden estar a la derecha del decimal. El objeto usa 8 bytes para almacenar los datos. Por tanto, el tipo de datos money tiene una precisión de 19, una escala de 4 y una longitud de 8.

Los tipos de datos money y smallmoney están limitados a cuatro espacios decimales. Use el tipo de datos decimal si se necesitan más espacios decimales.

Use un punto para separar las unidades parciales de moneda, como céntimos, de las unidades completas de moneda. Por ejemplo, 2.15 puede especificar 2 dólares y 15 centavos.

En las constantes money o smallmoney no se permiten los separadores de coma, aunque el formato de presentación de estos tipos de datos los incluye. Los separadores de coma sólo se pueden especificar en cadenas de caracteres explícitamente convertidas a money o smallmoney. Por ejemplo:

USE tempdb;
GO
CREATE TABLE TestMoney (cola INT PRIMARY KEY, colb MONEY);
GO
SET NOCOUNT ON;
GO

-- The following three INSERT statements work.
INSERT INTO TestMoney VALUES (1, $123.45);
GO
INSERT INTO TestMoney VALUES (2, $123123.45);
GO
INSERT INTO TestMoney VALUES (3, CAST('$444,123.45' AS MONEY) );
GO

-- This INSERT statement gets an error because of the comma
-- separator in the money string.
INSERT INTO TestMoney VALUES (3, $555,123.45);
GO
SET NOCOUNT OFF;
GO
SELECT * FROM TestMoney;
GO