我有这张桌子properties
其中有一个列atomic_mass
类型的NUMERIC(9,6)
:
atomic_mass
-------------
1.008000
4.002600
6.940000
9.012200
10.810000
12.011000
14.007000
15.999000
1.000000
(9 rows)
因此,我想删除该列的所有尾随零,例如 1.008、4.0026 等。
所以,我尝试执行以下操作:
UPDATE properties SET atomic_mass=trim(trailing '0' from atomic_mass::text)::numeric;
但是,它不起作用。我测试了trim
功能运行良好。如果我输入
SELECT trim(trailing '0' from atomic_mass::text)::numeric from properties
它返回
rtrim
--------
1.008
4.0026
6.94
9.0122
10.81
12.011
14.007
15.999
1
我想要的专栏。那么,我在这里做错了什么?
我正在使用 PostgreSQL 12.9。
您已将该列定义为NUMERIC(9,6)
。从这里数字类型 https://www.postgresql.org/docs/current/datatype-numeric.html那是NUMERIC(precision, scale)
, where scale
is :
数字的小数位数是小数部分(小数点右侧)的小数位数。
所以跑步trim
更新值不会有帮助,因为列定义scale
将覆盖它。尾随零是一个格式问题,必须在输出时处理。
UPDATE
鉴于您对此答案的评论中有关能够更改列类型的信息:
create table numeric_test (num_fld numeric, num6_fld numeric(9,6));
insert into numeric_test values (12.011000, 12.011000), (4.002600, 4.002600), (1.000000, 1.000000);
select * from numeric_test ;
num_fld | num6_fld
-----------+-----------
12.011000 | 12.011000
4.002600 | 4.002600
1.000000 | 1.000000
update numeric_test set num_fld = trim(trailing '0' from num_fld::text)::numeric, num6_fld = trim(trailing '0' from num6_fld::text)::numeric ;
select * from numeric_test ;
num_fld | num6_fld
---------+-----------
12.011 | 12.011000
4.0026 | 4.002600
1 | 1.000000
--
insert into numeric_test values (9.012200, 9.012200);
select * from numeric_test ;
num_fld | num6_fld
----------+-----------
12.011 | 12.011000
4.0026 | 4.002600
1 | 1.000000
9.012200 | 9.012200
与无拘无束的numeric
您可以在修剪现有值的更新中删除尾随零。但是,如果它们包含在不修剪它们的插入或更新中,您仍然会得到它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)