我正在使用ODP.NET BulkCopy将数据从dataTable复制到oracle数据库表。在我的datatable中,字段是字符串,因此数字可以表示为"123,456,789.111“(正确的格式)或"123.456.789,111”(datatable中可能出现的一种不相关格式)。在这种情况下,我希望在db中插入转换的数据。有没有一种方法可以使用BulkCopy来解决这个问题,或者我必须解析dataTable并手动转换所有错误的值?
谢谢!
发布于 2011-02-16 18:57:38
我想更好的方法是将数字存储为数字(因为这是正确的数字数据类型)。
当涉及到表示数字时,我会使用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; https://stackoverflow.com/questions/5013411
复制相似问题