SQL DECIMAL Vs MONEY Datatype
One of our devs today suggested that we use the data type MONEY
for a currency column. Instead of money, I proposed that we use DECIMAL
(19, 4).
Although MONEY has a similar definition, it should be utilised with caution.
SQL MONEY Datatype
currency values are stored in the MONEY data type .
MONEY more closely reflects the real-world situation, in which each figure is calculated to the closest cent, then the average is rounded again.
In a long calculating chain, the discrepancy can add up to a lot more than one cent.
Despite the fact that the MONEY datatype in SQL server saves a lot of space when compared to the DECIMAL(19,4) datatype, there's no need to utilise it for a T-SQL variable in a stored procedure, batch, or function.
Money requires 4 to 8 bytes, whereas decimal numbers can be 5, 9, 13, or 17.
The 9 bytes can cover the same range as the money's 8 bytes.
Example: Let's look at Work table with a MONEY column.
CREATE TABLE Product
(
Id INT IDENTITY,
ProductName VARCHAR(100),
Price MONEY
);
INSERT INTO Product VALUES (1,'Realme' 369500000);
INSERT INTO Product VALUES (2,'Iphone, 235000000);
INSERT INTO Product VALUES (3,'HP Laptop',10200000);
SELECT * FROM Product;
Ouput: The output will be
ID | ProductName | Price |
---|---|---|
1 | Realme | 369500000.00 |
2 | Iphone | 235000000.00 |
3 | Hp Laptop | 10200000.00 |
SQL DECIMAL Datatype
The DECIMAL data type is a fixed precision and scale exact number.
The total number of digits allowed in a column is represented by precision, which is an integer.
The number of decimal places is represented by scale, which is likewise an integer value.
Example : We have A table Employee with a DECIMAL column.
CREATE TABLE DemoTable
(
Id INT IDENTITY,
EmployeeName VARCHAR(100),
Salary DECIMAL(10,2)
);
GO
INSERT INTO Employee VALUES (1,'Smithi', 3450.2);
INSERT INTO Employee VALUES (3,'Johnson', 1674.667);
INSERT INTO Employee VALUES (5,'Jancy Lopez', 729.352);
SELECT * FROM Employee;
Employee salary can hold up to 10 digits and 2 decimal places.
If the value is more than 2 decimal places, it will be rounded.
If the value is less than 2 decimal places, a zero is added to complete the 2 digits.
Output: The output of Decimal datatype
ID | EmployeeName | Salary |
---|---|---|
1 | Smithi | 3450.20 |
3 | Johnson | 1674.67 |
5 | Jancy | 729.35 |
SQL Difference Between MONEY And DECIMAL Datatype
In below table we distinguish between the data types of money & decimal:-
MONEY | DECIMAL |
---|---|
A monetary value is represented by money. | Decimal is a precision and scale type with a fixed precision. |
Range of values: -922,337,203,685,477.5808 to 922,337,203,685,477.5807 | Values range from 10^38 +1 to 10^38 |
MONEY occupies 8 bytes. | DECIMAL(19,4) occupies 9 bytes. |
The dollar sign and commas are not a problem for MONEY. | The dollar sign and commas are not supported by DECIMAL. |
If the fractional units are greater than 5 decimal places, the MONEY data type contains rounding error. | This isn't a rounding error. |