我有這個表屬性,它有一個 NUMERIC(9,6) 型別的 atomic_mass 列:
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;
但它不起作用。我測驗了可以正常作業的修剪功能。如果我輸入
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。
uj5u.com熱心網友回復:
您已將列定義為NUMERIC(9,6)。從這里數字型別是NUMERIC(precision, scale),其中scale是 :
數字的小數位數是小數部分中小數位數的計數,位于小數點右側。
因此,運行trim更新值不會有幫助,因為列定義scale將覆寫它。尾隨零是必須在輸出時處理的格式問題。
更新
鑒于您對此答案的評論中有關能夠更改列型別的資訊:
create table numeric_test (num_fld numeric, num6_fld numeric(9,6));
nsert 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,您可以在修剪它們的更新中從現有值中洗掉尾隨零。但是,如果它們包含在不修剪它們的插入或更新中,您仍然會得到它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467482.html
標籤:PostgreSQL
上一篇:IHP-如何將IHP的Postgres實體與Moodle連接起來?
下一篇:將“初學者的Django”應用程式部署到Heroku失敗并出現ModuleNotFoundError:沒有名為“_tkinter”的模塊
