我正在使用ODP.NET BulkCopy将数据从dataTable复制到oracle数据库表。 在我的数据表中,字段是字符串,因此数字可以表示为“123,456,789.111”(正确格式)或“123.456.789,111”(数据表中可能出现的incoract格式)。 我想在这种情况下插入数据在db中转换。 有没有办法可以使用BulkCopy,或者我必须解析dataTable并手动转换所有错误的值?
谢谢!
答案 0 :(得分:0)
我想更好的方法是将数字存储为数字(因为 是数字的正确数据类型)。
在表示数字时,我会使用to_char(<number goes here>, '999g999g999d999')
。
编辑:嗯,我想我现在就明白了。数字 已经是错误的格式。我不知道你是否可以在你的过程中使用case .. when
,但这可能会给你一个想法:
with data_table as (
select '123,456,789.111' as n from dual union all
select '789.111' as n from dual union all
select '-2.345' as n from dual union all
select '777.777.777,777' as n from dual
) select
case when
n like '%.%,%'
then to_number(n, '999g999g999d999', 'nls_numeric_characters='',.''')
else to_number(n, '999g999g999d999', 'nls_numeric_characters=''.,''')
end
from data_table;