ORA-01722:无效的行以逗号开头VARCHAR2 TO_NUMBER

问题描述

我有以下VARCHAR2格式的源数据

,00100000004749745,100000001490116,125,200000002980232,25,439999997615814,5  
0  
1  
1,10000002384186  
1,5  
100  
2,1800000667572  
3   
3,29999995231628  
96  
999

将其转换为NUMBER的公式是什么?

带有以下内容

INSERT INTO table_b.column_b
    SELECT 
        TO_NUMBER (column_a,'9999999999D9999999999999999999999','nls_numeric_characters= ''.,''') as my_numbers
    FROM table_a.column_a;

我遇到错误

ora-01722:无效的数字错误消息。

我认为这是因为行以逗号开头,例如(,125)。

在目标表中,我需要数字格式的数据

0,00100000004749745   
0,100000001490116  
0,125  
0,200000002980232  
0,25 
0,439999997615814  
0,5 
0
1
...

还尝试在逗号前面放置零'0',然后他们将其更改为数字

Select 
    column_a,TO_NUMBER (column_a,'9999D9999999999999999999999',''')  as my_number 
from 
    (SELECT disTINCT 
         '0'|| column_a
     FROM table_a.column_a
     WHERE column_a LIKE (',125')
    );

但结果是

0,125   125

解决方法

正如Vasyl所说,您的nls_numeric_characters需要进行调整。下面的查询演示了如何将字符串转换为数字。

WITH
    my_numbers (column_a)
    AS
        (SELECT ',00100000004749745' FROM DUAL
         UNION ALL
         SELECT ',100000001490116' FROM DUAL
         UNION ALL
         SELECT ',125' FROM DUAL
         UNION ALL
         SELECT ',200000002980232' FROM DUAL
         UNION ALL
         SELECT ',25' FROM DUAL
         UNION ALL
         SELECT ',439999997615814' FROM DUAL
         UNION ALL
         SELECT ',5' FROM DUAL
         UNION ALL
         SELECT '0' FROM DUAL
         UNION ALL
         SELECT '1' FROM DUAL
         UNION ALL
         SELECT '1,10000002384186' FROM DUAL
         UNION ALL
         SELECT '1,5' FROM DUAL
         UNION ALL
         SELECT '100' FROM DUAL
         UNION ALL
         SELECT '2,1800000667572' FROM DUAL
         UNION ALL
         SELECT '3' FROM DUAL
         UNION ALL
         SELECT '3,29999995231628' FROM DUAL
         UNION ALL
         SELECT '96' FROM DUAL
         UNION ALL
         SELECT '999' FROM DUAL)
SELECT n.column_a,TO_NUMBER (n.column_a,'9999999999D9999999999999999999999999999','nls_numeric_characters= '',''')    AS column_a_as_number
  FROM my_numbers n;
,

好像您使用了错误的nls_numeric_characters值。尝试将'nls_numeric_characters=''.,'''替换为'nls_numeric_characters='','''

说明:您的nls_numeric_characters将.定义为十进制定界符,将,定义为组定界符,但是根据您的示例,您假定十进制定界符为,