📜  PostgreSQL – NUMERIC 数据类型

📅  最后修改于: 2022-05-13 01:57:15.737000             🧑  作者: Mango

PostgreSQL – NUMERIC 数据类型

PostgreSQL 支持NUMERIC类型来存储具有大量数字的数字。通常NUMERIC类型用于需要精度的货币或金额存储。

Syntax: NUMERIC(precision, scale)

Where,
     Precision: Total number of digits.
     Scale: Number of digits in terms of a fraction.

NUMERIC值最多可以有131、072位小数点前16位、小数点后383位。
允许具有零或正比例,如下面为具有零比例的 NUMERIC 列定义的语法:

Syntax: NUMERIC(precision)

如果同时消除精度和小数位数,则精度或小数位数没有限制,语法如下:

Syntax: NUMERIC

NUMERIC 和 DECIMAL 类型在 PostgreSQL 和 SQL 标准中是等效的。
如果不需要精度,建议不要使用 NUMERIC 类型,因为对 NUMERIC 值的计算比整数、浮点数和双精度慢。

示例 1:
使用以下命令创建一个名为 products 的新表:



CREATE TABLE IF NOT EXISTS products (
    id serial PRIMARY KEY,
    name VARCHAR NOT NULL,
    price NUMERIC (5, 2)
);

现在插入一些产品的价格比例超过价格列中声明的比例:

INSERT INTO products (name, price)
VALUES
    ('Phone', 100.2157), 
    ('Tablet', 300.2149);

由于价格列的小数位数为 2,PostgreSQL 将值 100.2157 向上舍入为 100.22,并将值 300.2149 向下舍入为 300.21
以下查询返回 products 表的所有行:

SELECT
    *
FROM
    products;

输出:

示例 2:
使用以下命令创建一个名为 products 的新表:

CREATE TABLE IF NOT EXISTS employee_salary(
    id serial PRIMARY KEY,
    name VARCHAR NOT NULL,
    salary NUMERIC (10, 2)
);

现在插入一些产品的价格比例超过价格列中声明的比例:

INSERT INTO employee_salary(name, salary)
VALUES
    ('Raju', 57896.2277),
    ('Abhishek', 84561.3657),
    ('Nikhil', 55100.11957), 
    ('Ravi', 49300.21425849);

由于价格列的小数位数为 2,PostgreSQL 将 Raju 的值 57896.2277 向上舍入为 57896.22,Abhishek 的值将值 84561.3657 向下舍入为 84561.36,Nisherk 的值将值 55100.11957 舍入为 55100 和 249.3012 的 249.3012 值到 249.3012。
以下查询返回 products 表的所有行:

SELECT
    *
FROM
    employee_salary;

输出: