2

大きな(500 MB)*.csvファイルをMySQLデータベースにインポートしようとしています。

私はそれまでです:

LOAD DATA INFILE '<file>'
    REPLACE
    INTO TABLE <table-name>
    FIELDS
        TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '"'
    IGNORE 1 LINES ( #Header
        <column-name1>,
        <column-name2>,
        ...
    );

列の1つに問題があります(データ型はintです)-エラーメッセージが表示されます:

エラーコード:1366整数値が正しくありません:''行の列の

*.csvファイルのこの行を見ました。エラーの原因となるセルには、内部に空白があります(次のように:...;; ...)。

この列の空白を無視するようにSQLに指示するにはどうすればよいですか?

* .csvファイルは非常に大きく、後でさらに大きなファイルをインポートする必要があるため、*。csvファイルの編集は避けたいと思います。SQLソリューションを探しています。

4

2 に答える 2

4

次のようにSETCOLUMNを追加します。

LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;

@ var1 / 100を「スペース」を処理する式に置き換えて、-Infinityまたは0または42に変換する必要があります...わからない。

于 2011-02-09T09:35:44.300 に答える
0

この回答は元々、@speendoによる編集として質問に含まれていました。私はそれを適切な答えに変換しました。


解決策は次のとおりです。

LOAD DATA INFILE '<file>'
    REPLACE
    INTO TABLE <table-name>
    FIELDS
        TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '"'
    IGNORE 1 LINES ( #Header
        <column-name1>,
        <column-name2>,
        @var1 #the variable that causes the problem
        ...
    )
    SET <column-name-of-problematic-column> = CASE
        WHEN @var1 = ' ' THEN NULL
        ELSE @var1
    END
;
于 2021-08-11T17:11:49.047 に答える