我想将具有逗号整数的“字符变化”类型的列转换为常规整数列。
我想支持从“1”到“10,000,000”的数字。
我试过使用:to_number(fieldname, '999G999G999'),但它只有在格式与字符串的确切长度匹配时才有效。
有没有办法支持从“1”到“10,000,000”?
我想将具有逗号整数的“字符变化”类型的列转换为常规整数列。
我想支持从“1”到“10,000,000”的数字。
我试过使用:to_number(fieldname, '999G999G999'),但它只有在格式与字符串的确切长度匹配时才有效。
有没有办法支持从“1”到“10,000,000”?
select replace(fieldname,',','')::numeric ;
按照您最初尝试的方式进行操作,不建议这样做:
select to_number( fieldname,
regexp_replace( replace(fieldname,',','G') , '[0-9]' ,'9','g')
);
内部替换将逗号更改为G
. 外部替换将数字更改为9
。这不考虑小数或负数。
您可以使用以下REPLACE()
功能去掉逗号:
CREATE TABLE Foo
(
Test NUMERIC
);
insert into Foo VALUES (REPLACE('1,234,567', ',', '')::numeric);
select * from Foo; -- Will show 1234567
您可以按照建议将逗号替换为空字符串,也可以将 to_number 与FM 前缀一起使用,因此查询如下所示:
SELECT to_number(my_column, 'FM99G999G999')
需要注意的是:
在表上使用函数REPLACE("fieldName", ',', '')时,如果有VIEW 使用TABLE,该函数将无法正常工作。您必须删除视图才能使用它。