PostgreSQL 数字


PostgreSQL 数字

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

什么是 PostgreSQL NUMERIC 数据类型?

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

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

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

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

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

PostgreSQL 数字数据类型的语法

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

NUMERIC (precision, scale)

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

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

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

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

注意:在 PostgreSQL 中,Numeric 数据类型最多可以有小数点前 131,072 位的值,小数点后 16,383 位。数字数据类型刻度可以是正 (+) 或零 (0)。

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

NUMERIC (precision)

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

NUMERIC

注意:PostgreSQL 中,Numeric 和 Decimal 类型是一一对应的,都遵循 SQL 标准。

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

PostgreSQL 数字数据类型示例

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

存储数值的示例

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

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

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

DROP TABLE IF EXISTS Items;

我们将使用CREATE命令在Organization 数据库中创建Items\表:

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

输出

项目\表具有执行上述命令后成功创建,如图中下面的截图:

PostgreSQL 数字

一旦生成了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\表中。

PostgreSQL 数字

因为item_price列的小数位数2,PostgreSQL 将值四舍五入 300.512,300.513。300.514300.51

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

SELECT * FROM Items;

输出

执行上述命令后,我们将得到如下结果:

PostgreSQL 数字

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

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

输出

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

PostgreSQL 数字

PostgreSQL NUMERIC 数据类型和 NaN 示例

让我们看看 PostgreSQL 数字数据类型和 NaN 的示例示例。

如果我们想获取数值,那么 PostgreSQL NUMERIC 数据类型也可以有一个特殊的值叫做 NaN,而NaN代表not-a-number

在下面的例子中,我们将更新ITEM_PRICEITEM_ID 1NaN的

UPDATE Items  
SET item_price = 'NaN'  
WHERE item_id = 1;

输出

执行上述命令后,我们将获得以下消息窗口,其中显示特定值已成功更新到Items\表中。

PostgreSQL 数字

注意:在上面的 Update 语句中,我们使用单引号 ('') 将 NaN 括起来。

现在我们已经使用SELECT命令从Items\表中获取所有记录:

SELECT * FROM Items;

输出

执行上述语句后,我们将得到以下结果:

PostgreSQL 数字

通常,NaN 不等于任何数字,包括其自身,这意味着以下表达式NaN = NaN将返回FALSE

但是,两个 NaN 值可以是等价的,并且 NaN 比其他数字更重要。此执行允许PostgreSQL对数值进行分类并在基于树的索引中使用它们。

要根据商品的Item_prices对商品进行分类,我们将使用以下命令:

SELECT * FROM Items  
ORDER BY item_price DESC;

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL 数字

正如我们在上面的屏幕截图中看到的,NaN大于值300.51

概述

PostgreSQL 数字数据类型部分,我们学习了以下主题:

  • PostgreSQL Numeric 数据类型可以使用 Numeric 列来存储数字。
  • PostgreSQL数字数据类型可以与 NaN(非数字)一起使用。