微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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将.定义为十进制定界符,将,定义为组定界符,但是根据您的示例,您假定十进制定界符为,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。