我是sql的新手,正尝试存储一个十进制值,以便将其真正存储为“ 6.0”。例如
INSERT INTO public.mytable(the_num) VALUES (6.0)
,但是结果存储为“ 6”而不是“ 6.0”,当然可以很好地存储任何非零数字,例如6.1或6.5。
如何在不将结尾的零都截断的情况下存储值?我应该使用其他一些数据类型吗?
答案 0 :(得分:2)
实数值以二进制格式存储,因此您只能决定它们以什么形式显示。您可以像这样使用real
将numeric
的值强制转换为(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。