1

Я пытаюсь выполнить массовую вставку из файла csv в таблицу SQL. Однако один из моих столбцов содержит числа с научной нотацией, например. 3E-4. Назовите эту колонку Столбец X.Ошибка, связанная с научной записью при вводе данных в SQL

  • Я первый попытался создать таблицу с numeric(18,9) типа для Колонка X, но когда я пытаюсь массовых данных для вставки в таблицу, я ударил ошибку несоответствия типов для столбца X.

  • Как этот post предложил, я попробовал следующее альтернативное решение: я создал другую таблицу, в которой вместо этого используются столбцы varchar(255). В этом случае проблем с объемной вставкой нет. Но после ввода данных я попытался изменить тип столбца для Столбец X от varchar(255) до float. Это дает мне ошибку Error converting datatype varchar to float.

Я не уверен, как решить эту проблему. На веб-сайте Microsoft предлагается следующее: «Чтобы обойти это поведение, используйте формат файла для массового импорта данных научной записи с плавающей запятой в десятичный столбец. В файле формата явным образом описываю столбец как реальные или плавающие данные».

Я понятия не имею, как создавать файлы формата. Это единственный способ обойти эту проблему? Если да, может ли кто-нибудь помочь с использованием файла формата или вместо этого предоставить альтернативное решение?

Спасибо!

+0

Смотрите, если [* это сообщение *] (http://stackoverflow.com/questions/7473081/convert-scientific-notation-to-float-when-using-openrowset-to-import-a -csv-file? rq = 1) предоставляет вам любую внутреннюю часть. –

+0

Спасибо. Я уже упоминал этот пост и пытался вставить данные в столбец 'varchar', а затем преобразовать тип столбца в' float' (как указано в моем сообщении). Но в моем случае это не сработало. – Mayou

ответ

0

У меня возникла такая же проблема при написании процедуры ETL. перемещение промежуточных данных в фактическую основную таблицу, и у нас были все столбцы в промежуточной таблице. Решение NVARCHAR , которое я делал, было, прежде чем вставлять в ядро ​​i conevrt этот столбец в соответствующее числовое значение. у вас уже есть столбец NVARCHR, так что вам нужно выполнить обновление в том же столбце с помощью Float и Again Numeric, сколько вам нужно.

DECLARE @t NUMERIC(28,10) 
SELECT @t=CONVERT(NUMERIC(28,10),CONVERT(FLOAT,'1.2408E+12')) 
SELECT @t 

update <tablename> SET <ColumnName> = CONVERT(NUMERIC(28,10),CONVERT(FLOAT,<ColumnName>)) 

then perofrm ALTER operation. но помните, что если вы собираетесь вставить следующую BCP в том же столбце, то лучше иметь другой столбец, в котором хранятся значения в правом типе данных. , если вы столкнулись с сбоем INSERT из-за «преобразования ошибок в тип данных ...», это означает, что есть некоторые данные, которые не могут быть преобразованы в числовые. см. другое сообщение по этому вопросу.

Characters to look for as whole value with ISNUMERIC SQL function

Смежные вопросы