3

ドイツ語のドット付き日付を含む CSV ファイルを MySQL データベースにインポートしています。CSV の日付を、MySQL で使用される正しいデータ型フィールドに自動的に正しくフォーマットする必要があります。

インポートには Sequel Pro を使用しています。関数を使用することになっていると思いますSTR_TO_DATEが、プログラムで Add Value または Expression を使用する方法について頭を悩ませることはできません。

ドイツの日付

CSV ファイルの日付は次のとおりです。

DD.MM.YYYY 例: 28.01.1978

MySQL の日付

これが私がデータベースで終わらせたいものです:

YYYY-MM-DD
e.g.: 1978-01-28

これが私が試したことです

Add Value or Expressionに入力しSTR_TO_DATE('$5', '%d.%m.%Y');ましたが、次のエラー メッセージのみが表示されます。

[行 1 のエラー] SQL 構文にエラーがあります。near '06.04.1997'', '%d.%m. %Y');,'2KMX','43354997')' 2 行目

何か案は?

4

3 に答える 3

4

最初にvarcharフィールド(temp_varchar_field)に日付フィールドをインポートする必要があります。その後、次のようなものを使用できます。

update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');

次のようなことをする必要があります。

  1. 一時フィールドを作成します。alter table table_name add column temp_varchar_field varchar(10);
  2. Sequel Proを使用してCVSファイルをインポートしますが、日付にはtemp_varchar_fieldを使用します。
  3. update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');
  4. すべてが正しくインポートされた場合は、一時フィールドを削除します。使用:alter table_name drop column temp_varchar_field;
于 2012-10-30T10:46:02.730 に答える
3

このSQLコードで動作するようになりました:

load data local infile 'myfile.csv' into table `mytable` 
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(surname, name, @germandate, telephone, etc)
set birthyear = STR_TO_DATE(@germandate , "%d.%m.%Y")
;

ここでの手がかり@germandateは、それぞれの列を で設定することによってデフォルトの MySQL 日付に変換される変数ですSTR_TO_DATE()。ハックは必要ありません!:)

于 2012-10-30T12:20:23.827 に答える
1

CSV インポートに MySQL 文字列として日付が含まれていると簡単ですが、それ以外の方法でも実行できます。

ステップ 1: ドイツの日付の varchar(10) を定義し、データをインポートします。

ステップ 2: テーブルに別のフィールドを追加します。

ALTER TABLE `yourtable` 
ADD COLUMN `your_mysql_date` DATE NULL; 

ステップ 3: データを移動します。

UPDATE yourtable
SET your_mysql_date = CONCAT(
    RIGHT(your_german_date,4),
    '-',
    MID(your_german_date,4,2),
    '-',
    LEFT(your_german_date,2)
);

...終わり!

これを解決する簡単な方法があるかもしれませんが、この方法では、データと書式設定を大幅に制御できます。

于 2012-10-30T10:50:37.017 に答える