SQL Server NUMERIC 数据类型介绍

NUMERIC 数据类型用于存储精确的数值,它可以表示固定精度和比 FLOATDOUBLE 更高的精度。在 SQL Server 中,NUMERICDECIMAL 是同一个数据类型,它们都用于表示固定精度的数值。

语法

NUMERIC(p,s)

其中,p 表示数值的总位数,s 表示小数部分的位数。p 的取值范围为 1 到 38,s 的取值范围为 0 到 p。默认情况下,ps 的值都为 18。

使用场景

NUMERIC 数据类型适用于存储精确的数值,例如货币金额、百分比等。在进行财务计算和税务计算等需要高精度计算的场景下,通常会使用 NUMERIC 数据类型。相比于 FLOATDOUBLE 数据类型,NUMERIC 数据类型可以确保精度不会因为计算误差而丢失。

示例

示例 1

在以下示例中,我们创建了一个名为 Sales 的表,其中包含两个字段:PriceQuantityPrice 字段使用 NUMERIC 数据类型,它的总位数为 18,小数位数为 2。我们插入了三条记录,每条记录包含一个 Price 和一个 Quantity

CREATE TABLE Sales (
  Price NUMERIC(18, 2),
  Quantity INT
);

INSERT INTO Sales VALUES (10.50, 100);
INSERT INTO Sales VALUES (20.75, 200);
INSERT INTO Sales VALUES (5.25, 50);

执行查询语句,可以看到每条记录的 Price 字段都保留了两位小数:

SELECT * FROM Sales;

结果:

Price Quantity
10.50 100
20.75 200
5.25 50

示例 2

在以下示例中,我们将使用 NUMERIC 数据类型进行简单的计算。我们创建了一个名为 Employee 的表,其中包含两个字段:SalaryBonusSalary 字段使用 NUMERIC 数据类型,它的总位数为 18,小数位数为 2。我们插入了两条记录,每条记录包含一个 Salary 和一个 Bonus

CREATE TABLE Employee (
  Salary NUMERIC(18, 2),
  Bonus NUMERIC(18, 2)
);

INSERT INTO Employee VALUES (5000.00, 1000.00);
INSERT INTO Employee VALUES (6000.00, 2000.00);

执行查询语句,可以计算出每个员工的总收入(Salary + Bonus):

SELECT Salary, Bonus, (Salary + Bonus) AS TotalIncome FROM Employee;

结果:

Salary Bonus TotalIncome
5000.00 1000.00 6000.00
6000.00 2000.00 8000.00

结论

NUMERIC 数据类型用于存储精确的数值,它适用于需要高精度计算的场景下。在进行财务计算和税务计算等需要高精度计算的场景下,通常会使用 NUMERIC 数据类型。