Postgres:以4位数或更多位数删除点?

问题描述 投票:0回答:2

我有一个表的列类型为数字db中的数据按如下方式保存:

      id | limit 
      23 | 1.485  ---> I need to update this number to 1485 without the point
      24 | 35.601 ---->  to 35601

我该怎么做?在此先感谢(我使用的是Postgres 9)

sql database postgresql postgresql-9.1
2个回答
1
投票

[等待其他答案的同时尝试以下更新语句,

update your_table_name
set limit = cast(replace(cast(limit as text),'.','') as numeric)

0
投票

您可以按照@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

Demo on SQLFiddle


0
投票

如果数据类型的确为numeric,则其中不存储任何点。当将数字转换为字符串时,这些分组分隔符必须是您的客户端软件的产物。

您可以使用to_char自己将数字转换为字符串并挫败客户端软件的误导性手段:

SELECT to_char(numcol, '99999999') FROM atable;
© www.soinside.com 2019 - 2024. All rights reserved.