Использование денежных данных

В MicrosoftSQL Server денежные данные, или значения валюты, хранятся с использованием двух типов данных: money и smallmoney. Для этих типов данных может использоваться любой из следующих символов валют.

Таблица символов валют, шестнадцатеричные значения

Валютные или денежные данные не требуется заключать в одинарные кавычки ( ' ). Важно помнить, что, несмотря на возможность указания денежных значений, которым предшествует символ валюты, SQL Server не сохраняет какие-либо сведения о валюте, связанные с символом, а хранит только числовое значение. Например, чтобы присвоить переменной значение 100 долларов, можно сделать следующее:

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

Возвращаться будет значение 100,0000 без символа валюты.

Объект, определенный как money, может содержать не более 19 цифр, 4 из которых могут располагаться справа от десятичной запятой. Для хранения данных в объекте используется 8 байт. Таким образом, тип данных money имеет точность 19, масштаб 4 и длину 8.

Типы данных money и smallmoney ограничены четырьмя знаками после запятой. Если требуется указать больше знаков после символов, используйте тип данных decimal.

Чтобы отделить дробные денежные единицы, например центы, от целых денежных единиц, используйте запятую. Например, 2,15 соответствует 2 долларам и 15 центам.

В константах типа money и smallmoney не допускаются запятые в качестве разделителей, хотя отображаемый формат этих типов данных содержит запятые-разделители. Запятые-разделители можно указывать только в символьных строках, явно приведенных к типу money или smallmoney. Например:

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