PostgreSQL Numeric类型

在本节中,我们将了解PostgreSQL 数字数据类型的工作原理,它允许我们存储数字数据。我们还看到了数字数据类型的示例。

什么是 PostgreSQL NUMERIC 数据类型?

PostgreSQL中,Numeric 数据类型用于存储具有各种有效数字的数字。换句话说,我们可以说 PostgreSQL Numeric数据类型用于将数字数据指定到表中,这需要数量或货币金额,其中需要精度。

数值数据类型包含以下内容:

  • 四字节和八字节浮点数
  • 二、四和八字节整数
  • 可选精度小数。

下表包含 PostgreSQL 支持的所有数值数据类型:

名称 存储空间 范围 描述
smallint 2个字节 -32768 至 +32767 存储整数,小范围。
integer 4字节 -2147483648 至 +2147483647 存储整数 当你想存储典型的整数时使用这个。
bigint 8字节 -9223372036854775808 至 9223372036854775807 存储整数,范围大。
decimal 多变的 小数点前最多131072位;小数点后最多 16383 位。 用户指定的精度,exact
numeric 多变的 小数点前最多131072位;小数点后最多 16383 位。 用户指定的精度,exact
real 4字节 6 位小数精度。 可变精度,不精确
double precision 8字节 15位小数精度 可变精度,不精确
serial 4字节 1至2147483647 自增整数
bigserial 8字节 1 至 9223372036854775807 大型自动递增整数

PostgreSQL 数值数据类型的语法

PostgreSQL 数值数据类型的语法如下:

NUMERIC (precision, scale)

在上面的语法中,我们使用了以下参数:

范围 描述
Numeric 它是一个关键字,用于存储数字。
Precision 它是总位数
Scale 就小数部分而言,它是几位数字。

我们可以通过以下示例来理解精度和比例的概念:

假设我们有数字2356.78。在此数字中,精度为 6,小数位数为 2。

以下语法显示带有零刻度的数字数据类型:

NUMERIC (precision)  

如果我们同时忽略precision 和 scale,我们可以有任何精度和 scale 达到上面提到的 precision 和 scale 的极限。

NUMERIC  

如果我们不需要precision,我们就不能使用 Numeric 数据类型,因为对Numeric 值的计算通常比双精度、浮点数和整数慢。

PostgreSQL 数字数据类型示例

让我们看不同的例子来理解PostgreSQL 数字数据类型是如何工作的。

如果我们想要存储比Numeric 列的声明范围更广泛的值,PostgreSQL 会将值四舍五入到定义的小数位数。

为此,我们将在CREATE命令的帮助下创建一个新的表名Items表,并使用INSERT命令插入一些值。

在这里,如果表存在于特定数据库中,我们还使用drop 命令删除该表。

DROP TABLE IF EXISTS Items;  

我们将通过在组织数据库中使用CREATE命令来创建Items表:

CREATE TABLE Items (  
    item_id SERIAL PRIMARY KEY,  
    item_name VARCHAR(100) NOT NULL,  
    item_price NUMERIC(5,2)  
);  

执行完以上命令后,Items表就创建成功了,如下截图所示:

生成Items表后,我们就可以使用INSERT命令将一些项目插入其中,其价格范围超过item_price列中声明的范围:

INSERT INTO Items (item_name, item_price)  
VALUES   
('Mercedes Benz ',300.512),   
 ('Lincoln Continental',300.513),  
 ('Audi A7',300.514);  

执行完上面的命令后,我们会得到如下输出,显示该值已经成功插入到Items表中。

因为item_price列的小数位数是2,PostgreSQL 将值300.512,300.513 舍入。300.514到300.51。

创建并插入Items表的值后,我们将使用SELECT命令返回Items表的所有行:

SELECT * FROM Items;  

执行上面的命令后,我们会得到如下结果:

如果我们想要存储一个精度超过声明精度的值,那么 PostgreSQL 将显示一个错误,如下例所示:

INSERT INTO Items (item_name, item_price)  
VALUES ('Mercedes Benz',23457.44);  

在执行上述命令时,我们将得到以下错误,即数字字段溢出,这意味着精度为 5 和小数位数为 2的字段必须舍入为绝对值,即小于10^3。

热门文章

优秀文章