我想把一个"character varying"类型的列中带有逗号的整数转换为普通整数列。
我希望支持从"1"到"10,000,000"的数字。
我尝试使用: to_number(fieldname, '999G999G999'),但只有当格式与字符串的长度完全匹配时才有效。
有没有一种方法可以支持从"1"到"10,000,000"的范围进行转换?
我想把一个"character varying"类型的列中带有逗号的整数转换为普通整数列。
我希望支持从"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
您可以按照建议将逗号替换为空字符串,或者使用带有FM前缀的to_number函数,这样查询将如下所示:
SELECT to_number(my_column, 'FM99G999G999')
select to_number('1,000,000,065','FM99G999G999');
的结果为100000
(与1,000,000,000
和10,000,000
相同)。 FM
是填充模式;它只压制填充空格和尾随的0
。 - vol7ron'FM999G999G999G999G999'
,它仍然有效。
不过,看起来to_number有点小问题,因为它不能处理 '9G999G999G999'。 - Daniel Castro有一些需要注意的事项:
当在表上使用函数REPLACE("fieldName", ',', '')时,如果有视图使用该表,则该函数将无法正常工作。您必须删除视图才能使用它。
整数
。 - Oleg Mikhailov