删除 4 位数或更多位数的点?

Remove point in numbers of 4 or more digits?

我使用的是 PostgreSQL 9,我有一个 table 列类型 numeric。 数据库中的数据是这样保存的:

id | limit 
23 | 1.485
24 | 35.601

我需要用整数值替换 table 中的 limit 值,在本例中:

我该怎么做?

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

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

您可以按照@Vivek 的描述更新值,但您需要限定更新,以便仅更新那些具有 4 位或更多数字的数字,您可以使用 SIMILAR TO:[=15= 进行检查]

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

如果数据类型确实是numeric,那么里面没有存储点。这些分组分隔符必须是您的客户端软件在将数字转换为字符串时的产物。

您可以使用 to_char 自行将数字转换为字符串,从而阻止客户端软件的误导:

SELECT to_char(numcol, '99999999') FROM atable;

问题看起来是将格式化字符串插入数字字段的结果。 例如,格式化数字“1.234”(一千二百三十四)插入为 1.234(一整数和千分之二百三十四)

如果我的建议正确,可以通过乘以 1000 来解决问题,整数除外(它们是正确存储的)。

所以接下来的解决方案是:

UPDATE table set limit = round(limit * 1000) where limit != round(limit);