Проблема с форматом номера Oracle ODP.NET BulkCopy

Я использую ODP.NET BulkCopy для копирования данных из таблицы данных в таблицу базы данных оракула. В моей таблице данных поля представляют собой строку, поэтому число может быть представлено как «123 456 789,111» (правильный формат) или «123,456,789,111» (неверный формат, который может встречаться в таблице данных). Я хотел бы, чтобы в этой ситуации данные были вставлены преобразованными в БД. Есть ли способ, которым я могу использовать BulkCopy для этого, или мне нужно проанализировать dataTable и вручную преобразовать все неправильные значения?

Спасибо!


person maephisto    schedule 16.02.2011    source источник


Ответы (1)


Думаю, лучше было бы хранить числа как числа (потому что это является правильным типом данных для чисел).

Когда дело доходит до представления чисел, я бы использовал 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; 
person René Nyffenegger    schedule 16.02.2011