📜  PostgreSQL数值

📅  最后修改于: 2020-11-30 01:33:31             🧑  作者: Mango

PostgreSQL数值

在本节中,我们将了解PostgreSQL Numeric数据类型的工作方式,这使我们可以存储数字数据。我们还看到了数值数据类型的示例

什么是PostgreSQL NUMERIC数据类型?

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

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

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

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

Name Storage size Range Description
smallint 2 bytes -32768 to +32767 stores whole numbers, small range.
integer 4 bytes -2147483648 to +2147483647 stores whole numbers use this when you want to store typical integers.
bigint 8 bytes -9223372036854775808 to 9223372036854775807 stores whole numbers, large range.
decimal variable up to 131072 digits before the decimal point; up to 16383 digits after the decimal point. user-specified precision, exact
numeric variable up to 131072 digits before the decimal point; up to 16383 digits after the decimal point. user-specified precision, exact
real 4 bytes 6 decimal digits precision. variable-precision, inexact
double precision 8 bytes 15 decimal digits precision variable-precision, inexact
serial 4 bytes 1 to 2147483647 auto incrementing integer
bigserial 8 bytes 1 to 9223372036854775807 large auto incrementing integer

PostgreSQL数值数据类型的语法

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

NUMERIC (precision, scale)

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

Parameter Description
Numeric It is a keyword, which is used to store the numeric numbers.
Precision It is the total number of digits
Scale It is several digits in terms of the fraction part.

通过查看以下示例,我们可以了解精度和刻度的概念:

假设我们有2356.78。该数字的精度为6小数位数为2。

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

以下语法显示带有Scale ZERO的数值数据类型:

NUMERIC (precision)

而且,如果我们同时忽略了精度和小数位数,我们可以拥有任何精度和小数位数,直到达到上述精度和小数位数的极限。

NUMERIC

注意:在PostgreSQL中,数字和十进制类型彼此对应,并且它们都遵循SQL标准。

如果不要求precision ,则不能使用Numeric数据类型,因为对Numeric值的计算通常比double precision,floatinteger慢。

PostgreSQL数值数据类型的示例

让我们来看不同的示例,以了解PostgreSQL Numeric数据类型如何工作。

存储数值的示例

如果我们要存储的值比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表已成功创建,如以下屏幕截图所示:

生成“项目”表后,我们准备使用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.514300.51

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

SELECT * FROM Items;

输出量

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

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

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

输出量

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

PostgreSQL NUMERIC数据类型和NaN的示例

让我们看一下PostgreSQL数值数据类型和NaN的示例示例。

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

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

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

输出量

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


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

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

SELECT * FROM Items;

输出量

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

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

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

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

SELECT * FROM Items
ORDER BY item_price DESC;

输出量

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

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

总览

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

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