Skip to main content
 首页 » 数据库

PostgreSQL NUMERIC 数据类型

2022年07月19日155luoye11

NUMERIC 类型能存储大数据量的数值。通常NUMERIC类型用于需要精确性的数字,如货币数量或度量。本文介绍 NUMERIC ,并通过示例学习它的特性。

介绍 NUMERIC

NUMERIC类型的语法:

NUMERIC(precision, scale) 

precision 表示整个数据长度,scale 表示小数部分的长度。如: 1234.567 ,precision 为 7 ,scale 为 3.

NUMERIC 类型 在小数点前面长度可达到 131,072 ,小数点后面长度可达到 16,383。scale 可以为0 或正数,下面示例表示 scale 为 0:

NUMERIC(precision) 

如果 precision 和 scale 都忽略,则可以存储 任何上面提及限制内的长度和精度。

NUMERIC 

在 PostgreSQL中 NUMERICDECIMAL 是等价的,两者都是SQL标准的一部分。如果精度不是必须的,则不应选择 NUMBER,因为计算 NUMBER 要 比 integer ,float ,double 慢。

示例

下面看一些示例。

  1. 存储数值

    如果您存储的值的精度大于NUMERIC列声明时置顶的精度,PostgreSQL将把该值四舍五入到指定的小数位数。我们看示例:

    CREATE TABLE products ( 
        id SERIAL PRIMARY KEY, 
        name VARCHAR(100) NOT NULL, 
        price NUMERIC(5,2) 
    ); 
    

    然后插入示例记录:

    INSERT INTO products (name, price) 
    VALUES ('Phone',500.215),  
           ('Tablet',500.214); 
    

    我们声明时 price 的scale 为 2, 但给的值小数部分为 3 ,因此会四舍五入:

    SELECT * FROM products; 
    

    返回结果:

    id name price
    1 Phone 500.22
    2 Tablet 500.21

    如果给的值超过声明时的precision 长度,POSTGRESQL会报错:

    INSERT INTO products (name, price) 
    VALUES('Phone',123456.21); 
    

    SQL 错误 [22003]: 错误: 数字字段溢出
    详细:精度为5,范围是2的字段必须四舍五入到小于10^3的绝对值.

  2. 数值类型与NaN

除了存储数值外,还可以存储特殊的值 NaN,它表示不是数值。请看示例:

UPDATE products 
SET price = 'NaN' 
WHERE id = 1; 

注意,NaN的值在update 中必须使用 单引号包裹。展示结果:

 SELECT * FROM products;      

返回结果:

id name price
2 Tablet 500.21
1 Phone NaN

注意 NaN 不等于任何数值,包括它自身,也就是说,表达式 NaN = NaN 为 fasle。然而,当排序时两个NaN值相等,NaN比其他数大。PostgreSQL在基于树的索引中使用它们进行排序。

SELECT * FROM products 
ORDER BY price DESC; 
id name price
1 Phone NaN
2 Tablet 500.21

我们看到,NaN500.21 大。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/118859550
阅读延展