问题描述
我有以下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将.
定义为十进制定界符,将,
定义为组定界符,但是根据您的示例,您假定十进制定界符为,