我有一个表的列类型为数字db中的数据按如下方式保存:
id | limit
23 | 1.485 ---> I need to update this number to 1485 without the point
24 | 35.601 ----> to 35601
我该怎么做?在此先感谢(我使用的是Postgres 9)
[等待其他答案的同时尝试以下更新语句,
update your_table_name
set limit = cast(replace(cast(limit as text),'.','') as numeric)
您可以按照@Vivek的描述更新值,但是您需要限定更新的范围,以便仅更新具有4位或更多数字的数字,您可以使用SIMILAR TO
进行检查:
UPDATE data
SET "limit" = CAST(REPLACE(CAST("limit" AS text), '.', '') AS numeric)
WHERE REPLACE(CAST("limit" AS text), '.', '') SIMILAR TO '[0-9]{4,}'
对于此示例数据:
CREATE TABLE data
(id int, "limit" numeric)
;
INSERT INTO data
(id, "limit")
VALUES
(23, 1.485),
(24, 35.601),
(25, 3.2),
(26, 1.23),
(27, 23.1)
输出为
id limit
23 1485
24 35601
25 3.2
26 1.23
27 23.1
如果数据类型的确为numeric
,则其中不存储任何点。当将数字转换为字符串时,这些分组分隔符必须是您的客户端软件的产物。
您可以使用to_char
自己将数字转换为字符串并挫败客户端软件的误导性手段:
SELECT to_char(numcol, '99999999') FROM atable;