PostgreSQL NUMERIC 数据类型

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;
    

    返回结果:

    idnameprice
    1Phone500.22
    2Tablet500.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;     

返回结果:

idnameprice
2Tablet500.21
1PhoneNaN

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

SELECT * FROM products
ORDER BY price DESC;
idnameprice
1PhoneNaN
2Tablet500.21

我们看到,NaN500.21 大。

  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值