我导入了一些有点大数据的数据,有时是奇数格式(例如,12,345.01-和1,945.001-),我正试图“修复”它。
数据导入为VARCHAR(20)
我的解决方案:
to_number(BadNumCol, 'S999G999G999D999')
input: 10426.95 ;261.000 ;33.93-
outputs:42695.00 ;261.000 ; 3.93
the output is NUMERIC(12,3)
desired output: 10426.95 ; 261.000 ; -33.93
这里发生了什么?在我的无知中,我错过了什么/不理解?
而且,我如何修复这些~4亿个数据元素?
答案 0 :(得分:0)
这是我在这里看到的两个问题。
对于来自数据“解决方案”部分的样本输入数据,样本输入数据都没有组分隔符,因此您在TO_NUMBER函数中指定的组分隔符不匹配。
此外,当您的数据具有尾随减号时,您指定一个锚定在字符串开头的符号字符。
我可以从您的示例输入数据中推断出最合适的转换格式字符串:'999999999D999MI'
select * from num_test;
BADNUMCOL
-----------
261.000
10426.95
33.93-
(3 rows)
select to_number(BadNumCol,'999999999D999MI')::NUMERIC(12,3) GoodNumCol from num_test;
GOODNUMCOL
------------
10426.950
-33.930
261.000
(3 rows)