📅  最后修改于: 2020-11-30 01:33:31             🧑  作者: Mango
在本节中,我们将了解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 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,float和integer慢。
让我们来看不同的示例,以了解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.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的绝对值。
让我们看一下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数值数据类型”部分中,我们学习了以下主题: