PostgreSQL的货币数据类型介绍及示例

937 阅读1分钟

货币数据类型用于在PostgreSQL数据库表中存储货币数据。PostgreSQL的货币数据类型用于存储具有固定小数精度的货币数据。ic_monetary设置是用来决定小数精度的。货币数据类型的大小是8字节,这个数据类型的范围是-92233720368547758.08到+92233720368547758.07。整数和浮动数据类型也可以用来在PostgreSQL数据库的表中存储货币值。这种数据类型的输出取决于地区设置值。本教程中已经展示了在PostgreSQL数据库中定义和使用货币数据类型的不同方法。

前提条件

在执行本教程中所示的SQL语句之前,你必须在Linux操作系统上安装最新版本的PostgreSQL软件包。运行下面的命令来安装和启动PostgreSQL。

$sudo apt-get \-y installpostgresql postgresql-contrib  
  
$sudosystemctl start postgresql.service

运行下面的命令,以root权限登录到PostgreSQL。

$ sudo\-upostgres psql

使用MONEY数据类型

在创建任何具有布尔数据类型的表之前,你必须先创建一个PostgreSQL数据库。因此,运行下面的命令来创建一个名为 "testdb"的数据库。

#CREATE DATABASEtestdb;

创建数据库后会出现以下输出。

在当前数据库中创建一个名为'products_1'的表,有三个字段。第一个字段名是Id,它是表的主键。当有新的记录插入时,这个字段的值将会自动增加。第二个字段名是Name,数据类型是VARCHAR(30)。第三个字段名是Price,数据类型是MONEY

#CREATE TABLEproducts\_1(  
  
Id SERIALPRIMARY KEY,  
NameVARCHAR (30),  
Price MONEY);

如果表被成功创建,将出现以下输出。

运行以下三个INSERT查询,将三个不同的值插入到MONEY数据类型的字段中。

#INSERT INTOproducts\_1(Name,Price) VALUES ('Bag', 55);  
  
#INSERT INTOproducts\_1(Name,Price) VALUES ('Pen', 2.50);  
  
#INSERT INTOproducts\_1(Name,Price) VALUES ('Water Color', 15.895634) ;

执行上述查询后会出现以下输出。

运行下面的SELECT查询来读取products_1表中的所有记录。

#SELECT \* FROMproducts\_1;

执行上述查询后,将出现以下输出结果。输出显示了MONEY数据类型字段中的默认货币符号。

使用NUMERIC数据类型。

NUMERIC数据类型是另一种在PostgreSQL表中存储货币值的数据类型。在当前数据库中创建一个名为'products_2'的表,有三个字段。第一个字段名是Id,它是表的主键。当有新的记录插入时,这个字段的值将会自动增加。第二个字段名是Name,数据类型是VARCHAR(30)。第三个字段名是Price,数据类型是NUMERIC (5, 3)。

#CREATE TABLEproducts\_2(  
  
Id SERIALPRIMARY KEY,  
NameVARCHAR (30),  
PriceNUMERIC (5, 3)) ;

如果表被成功创建,将出现以下输出。

运行下面的INSERT查询,将两条记录插入到products_2表中。

#INSERT INTOproducts\_2(Name,Price) VALUES ('Pencil', 2.999);  
  
#INSERT INTOproducts\_2(Name,Price) VALUES ('Color Pencil ', 10.999999);

在执行上述查询后会出现以下输出。

如果数值超过了数据类型的精度值,NUMERIC数据类型会产生一个错误。下面的INSERT查询将产生一个错误。

#INSERT INTOproducts\_2(Name,Price) VALUES ('Scanner', 1000.999999);

下面的输出显示了由NUMERIC字段产生的错误。

在SELECT查询中,可以在NUMERIC字段的值之前添加任何货币符号。所以,使用NUMERIC数据类型比使用MONEY数据类型来存储货币数据更好。运行下面的SELECT查询,通过在 Price字段 添加 '$'来读取products_2表中的所有值。

#SELECTId,Name, '$' ||PriceASPriceFROMproducts\_2;

执行上述查询后,将出现以下输出。

使用FLOAT数据类型。

float数据类型是存储货币数据的另一种选择。但是不推荐使用float数据类型,因为在这种数据类型中,数值是作为近似值存储的。这里显示了这种数据类型在存储货币价值方面的用途。

在当前数据库中创建一个名为'products_3'的表,有三个字段。第一个字段名是Id,它是表的主键。当插入一条新的记录时,这个字段的值将会自动增加。第二个字段名是Name,数据类型是VARCHAR(30)。第三个字段名是Price,数据类型是FLOAT

#CREATE TABLEproducts\_3(  
  
Id SERIALPRIMARY KEY,  
NameVARCHAR (30),  
PriceFLOAT);

如果表被成功创建,将出现以下输出。

运行下面的INSERT查询,将两个值插入到FLOAT数据类型的字段中。

#INSERT INTOproducts\_3(Name,Price) VALUES ('HP Printer', 150.99);  
  
#INSERT INTOproducts\_3(Name,Price) VALUES ('Samsung Printer', 180.4578);  
  
#INSERT INTOproducts\_3(Name,Price) VALUES ('Dell Printer', 320.56);

执行上述查询后会出现以下输出。

运行下面的SELECT查询来读取products_3表中的所有记录。

#SELECTId,Name, '$' ||PriceASPriceFROMproducts\_3;

执行上述查询后,将出现以下输出。

结论

在本教程中,通过使用多个表,展示了不同数据类型在PostgreSQL表中存储货币数据的用途。MONEY、NUMERIC和FLOAT数据类型被用来存储货币数据,这里已经解释了每种数据类型的优点和缺点。