PostgreSQL使用实数类型

时间:2018-07-16 22:09:51

标签: postgresql

我是sql的新手,正尝试存储一个十进制值,以便将其真正存储为“ 6.0”。例如

INSERT INTO public.mytable(the_num) VALUES (6.0)

,但是结果存储为“ 6”而不是“ 6.0”,当然可以很好地存储任何非零数字,例如6.1或6.5。

如何在不将结尾的零都截断的情况下存储值?我应该使用其他一些数据类型吗?

1 个答案:

答案 0 :(得分:2)

实数值以二进制格式存储,因此您只能决定它们以什么形式显示。您可以像这样使用realnumeric的值强制转换为(precision, scale)

with my_table(the_num) as (
values
    (6.0::real),
    (6.1),
    (6.15)
)

select the_num, the_num::numeric(15,1), the_num::numeric(15,2)
from my_table

 the_num | the_num | the_num 
---------+---------+---------
       6 |     6.0 |    6.00
     6.1 |     6.1 |    6.10
    6.15 |     6.2 |    6.15
(3 rows)

或者,您可以使用函数to_char(),例如

select the_num, to_char(the_num, '999D9'), to_char(the_num, '999D99')
from my_table

 the_num | to_char | to_char 
---------+---------+---------
       6 |    6.0  |    6.00
     6.1 |    6.1  |    6.10
    6.15 |    6.2  |    6.15
(3 rows)    

您还可以在表定义中使用numeric类型代替real,例如:

create table my_table (
    the_num numeric(15, 2)
);

在这种情况下,值将以定义的比例尺存储。

在文档中详细了解Numeric Types