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