2010-02-10 15 views
15

kullanarak CSV'nin içe aktarımı sırasında dize tarihine nasıl değiştirilir MySQL'in LOAD DATA LOCAL INFILE SQL deyimini kullanarak bir CSV dosyasındaki verileri varolan bir veritabanı tablosuna yüklüyorum.Dize tarihini MySQL'in LOAD DATA LOCAL INFILE

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(name, address, dateOfBirth) 

anda aşağıdaki biçimde tarihi henüz DateOfBirth alanına eşleştiren CSV'deki üçüncü sütun:

14-Feb-10 

nasıl değiştirebilir İşte

bir örnek SQL deyimi Yukarıdaki SQL deyimi, tarihi MySQL'in tarih biçimine, yani 2010-02-14 biçimine biçimlendirmek için mi?

STR_TO_DATE('14-Feb-10', '%d-%b-%y')

cevap

23

O sütununda satır içeriğini başvurmak için bir değişken ile birlikte SET maddesini kullanmak gerekir:

kullanıyorum, normal INSERT sözdizimi kullanırken bir dize tarih dönüştürmek için biliyorum . Sütun listenizde, tarih sütununuzu değişken adına atarsınız. Daha sonra SET ifadenizde kullanabilirsiniz. (Bu konuda test etmek önümde MySQL yok, unutmayın.)

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(name, address, @var1) 
set dateOfBirth = STR_TO_DATE(@var1, '%d-%b-%y') 

adresindeki sayfaya aşağı örnekleri çoğaltmak bir yol bakınız: (http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html emin değil bu sayfayı ana belgelerinde farklı görünmesinin nedeni aslında SET kullanımına yönelik bir örnek içerdiğini) size test esneklik biraz verir

+0

Pedantic belki, ama bence% M yerine% M ... – Everyone

+2

@Everyone Teşekkürler. Aslında, soruda verilen örneğe göre, kısaltılmış ay adı için "% b" olması gerektiği anlaşılıyor. –

+0

Haklısınız. Benim hatam. – Everyone

4

biraz daha uzun bir süreç.

  • kullanın VARCHAR (64) kolon callsed örn. aldığınız biçimlendirilmemiş tarihi tutmak için mydate_text.
  • Yük yukarı/Bu düz metin alanına
  • Run

    GÜNCELLEME mytable SET mydate = STR_TO_DATE gibi bir sorgu içine tarih koyarak tablo içe (mydate_text, '% Y-% b-% d')

    hepsi tamam görünüyorsa Tamam değilse
  • , sadece yeni bir formatı ile tekrar deneyin sizin mydate_text kolon

  • bırakın. Bu tekniğe

avantajı, kalmadan biçimleri ile uğraşmak sağlayan özellikle uzunluk tablo sütunları ile yeniden ithalat biraz telaşlı MySQL LOAD DATA sözdizimi kullanarak tablo, için. Tam olarak ne yaptığınızı biliyorsanız, yukarıdaki cevap en iyisidir. MySQL'te uzman değilseniz, bu teknik, formatlarınızı tam olarak doğru şekilde alana kadar yardımcı olabilir.