1/22/25, 3:36 PM decimal and numeric (Transact-SQL) - SQL Server | Microsoft Learn
decimal and numeric (Transact-SQL)
Article • 11/22/2024
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance
Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint
in Microsoft Fabric Warehouse in Microsoft Fabric SQL database in Microsoft
Fabric
decimal and numeric are numeric data types that have a fixed precision and scale. decimal
and numeric are synonyms and can be used interchangeably.
Arguments
decimal [ ( p [ , s ] ) ] and numeric [ ( p [ , s ] ) ]
Fixed precision and scale numbers. When maximum precision is used, valid values are from
-10^38 + 1 through 10^38 - 1 . The ISO synonyms for decimal are dec and dec(p,s).
numeric is functionally identical to decimal.
p (precision)
The maximum total number of decimal digits to be stored. This number includes both the
left and the right sides of the decimal point. The precision must be a value from 1 through
the maximum precision of 38. The default precision is 18.
7 Note
Informatica only supports 16 significant digits, regardless of the precision and scale
specified.
s (scale)
The number of decimal digits that are stored to the right of the decimal point. This number
is subtracted from p to determine the maximum number of digits to the left of the decimal
point. Scale must be a value from 0 through p, and can only be specified if precision is
https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver16 1/4
1/22/25, 3:36 PM decimal and numeric (Transact-SQL) - SQL Server | Microsoft Learn
specified. The default scale is 0 , and so 0 <= s <= p . Maximum storage sizes vary, based
on the precision.
ノ Expand table
Precision Storage bytes
1-9 5
10-19 9
20-28 13
29-38 17
7 Note
Informatica (connected through the SQL Server PDW Informatica Connector) only
supports 16 significant digits, regardless of the precision and scale specified.
Convert decimal and numeric data
For decimal and numeric data types, SQL Server considers each combination of precision
and scale as a different data type. For example, decimal(5,5) and decimal(5,0) are
considered different data types.
In Transact-SQL statements, a constant with a decimal point is automatically converted into
a numeric data value, using the minimum precision and scale necessary. For example, the
constant 12.345 is converted into a numeric value, with a precision of 5 , and a scale of 3 .
ノ Expand table
Conversion from Conversion to Conversion risk
decimal and numeric float or real Possible loss of
precision
int, smallint, tinyint, float, real, money, or decimal and Possible overflow
smallmoney numeric
https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver16 2/4
1/22/25, 3:36 PM decimal and numeric (Transact-SQL) - SQL Server | Microsoft Learn
By default, SQL Server uses rounding when converting a number to a decimal or numeric
value with a lower precision and scale. Conversely, if the SET ARITHABORT option is ON , SQL
Server raises an error when overflow occurs. Loss of only precision and scale isn't sufficient
to raise an error.
Before SQL Server 2016 (13.x), conversion of float values to decimal or numeric is
restricted to values of precision 17 digits only. Any float value less than 5E-18 (when set
using either the scientific notation of 5E-18 or the decimal notation of
0.000000000000000005 ) rounds down to 0 . This restriction doesn't appear in SQL Server
2016 (13.x) and later versions.
Examples
The following example creates a table using the decimal and numeric data types. Values
are inserted into each column. The results are returned by using a SELECT statement.
SQL
CREATE TABLE dbo.MyTable (
MyDecimalColumn DECIMAL(5, 2),
MyNumericColumn NUMERIC(10, 5)
);
GO
INSERT INTO dbo.MyTable
VALUES (123, 12345.12);
GO
SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;
Here's the result set.
Output
MyDecimalColumn MyNumericColumn
---------------- ----------------
123.00 12345.12000
Related content
https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver16 3/4
1/22/25, 3:36 PM decimal and numeric (Transact-SQL) - SQL Server | Microsoft Learn
ALTER TABLE (Transact-SQL)
CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)
Feedback
Was this page helpful? Yes No
Provide product feedback | Get help at Microsoft Q&A
https://learn.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver16 4/4