PostgreSQL 数值型

17 Mar 2025 | 5 分钟阅读

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

什么是 PostgreSQL NUMERIC 数据类型?

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

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

  • 四字节和八字节浮点数
  • 二字节、四字节和八字节整数
  • 可选择精度的十进制数.

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

名称存储大小范围描述
smallint2 字节-32768 至 +32767存储整数,范围较小。
整数4 字节-2147483648 至 +2147483647存储整数,当您想存储典型整数时使用此类型。
bigint8 字节-9223372036854775808 到 9223372036854775807存储整数,范围较大。
decimalvariable (变量)小数点前最多 131072 位数字;小数点后最多 16383 位数字。用户指定的精度,精确
numericvariable (变量)小数点前最多 131072 位数字;小数点后最多 16383 位数字。用户指定的精度,精确
real4 字节6 位小数精度。可变精度,不精确
双精度8 字节15 位小数精度可变精度,不精确
serial4 字节1 到 2147483647自增整数
bigserial8 字节1 到 9223372036854775807大型自增整数

PostgreSQL 数值数据类型语法

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

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

参数描述
数字这是一个关键字,用于存储数字。
精度这是总位数
规模这是小数部分中的位数。

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

假设我们有数字 2356.78。 在这个数字中,精度是 6标度 是 2。

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

以下语法显示了带有 标度为零 的 Numeric 数据类型

如果我们忽略 精度和标度,我们可以拥有任何精度和标度,直到上面提到的精度和标度限制。

注意:在 PostgreSQL 中,Numeric 和 Decimal 类型是相互对应的,它们也都遵循 SQL 标准。

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

PostgreSQL 数值数据类型示例

让我们看一些示例,以了解 PostgreSQL 数值数据类型 的工作原理。

存储数值的示例

如果我们想要存储比 Numeric 列 声明的标度更大的值,PostgreSQL 会将其舍入到指定的小数位数。

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

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

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

输出

执行上述命令后,Items 表已成功创建,如下面的屏幕截图所示

PostgreSQL Numeric

一旦 Items 表生成,我们就可以使用 INSERT 命令插入一些物品及其价格,这些价格的标度超过了 item_price 列中声明的标度

输出

执行上述命令后,我们将得到以下输出,显示值已成功插入 Items 表中。

PostgreSQL Numeric

因为 item_price 列的标度是 2,PostgreSQL 会将值 300.512, 300.513, 300.514 舍入到 300.51

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

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Numeric

如果我们想存储一个精度超过声明精度的值,PostgreSQL 会显示一个错误,正如我们在下面的示例中看到的

输出

执行上述命令后,我们将得到以下错误:numeric 字段溢出,这意味着一个具有 精度 5 和标度 2 的字段必须舍入到绝对值小于 10^3 的值。

PostgreSQL Numeric

PostgreSQL NUMERIC 数据类型和 NaN 示例

让我们来看一个 PostgreSQL Numeric 数据类型和 NaN 的示例。

如果我们想获取数值,PostgreSQL NUMERIC 数据类型还可以有一个特殊值,称为 NaN,NaN 代表 非数字

在下面的示例中,我们将 item_id 为 1item_price 更新为 NaN

输出

执行上述命令后,我们将看到下面的消息窗口,显示特定值已成功更新到 Items 表中。

PostgreSQL Numeric

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

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

输出

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

PostgreSQL Numeric

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

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

为了根据 Item_prices 对 Items 进行分类,我们将使用以下命令

输出

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

PostgreSQL Numeric

如上面的屏幕截图所示,NaN 大于值 300.51

概述

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

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

下一主题PostgreSQL 字符