如何解决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;
我遇到错误
我认为这是因为行以逗号开头,例如(,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 举报,一经查实,本站将立刻删除。