10

我想将具有逗号整数的“字符变化”类型的列转换为常规整数列。

我想支持从“1”到“10,000,000”的数字。

我试过使用:to_number(fieldname, '999G999G999'),但它只有在格式与字符串的确切长度匹配时才有效。

有没有办法支持从“1”到“10,000,000”?

4

4 回答 4

24
select replace(fieldname,',','')::numeric ;

按照您最初尝试的方式进行操作,不建议这样做:

select to_number( fieldname,
                  regexp_replace( replace(fieldname,',','G') , '[0-9]' ,'9','g')
                );

内部替换将逗号更改为G. 外部替换将数字更改为9。这不考虑小数或负数。

于 2013-09-18T22:00:50.747 回答
1

您可以使用以下REPLACE()功能去掉逗号:

CREATE TABLE Foo
(
  Test NUMERIC
);

insert into Foo VALUES (REPLACE('1,234,567', ',', '')::numeric);

select * from Foo; -- Will show 1234567
于 2013-09-18T22:00:33.900 回答
0

您可以按照建议将逗号替换为空字符串,也可以将 to_number 与FM 前缀一起使用,因此查询如下所示:

SELECT to_number(my_column, 'FM99G999G999')
于 2013-09-18T22:12:02.583 回答
-1

需要注意的是:

在表上使用函数REPLACE("fieldName", ',', '')时,如果有VIEW 使用TABLE,该函数将无法正常工作。您必须删除视图才能使用它。

于 2016-01-18T07:38:23.670 回答