2013-09-20 11 views
8

Domyślny format daty kolumny daty to YYYY-MM-DD HH:MM:SS w MySQL.Sposób ładowania danych daty w MySQL przy użyciu DANYCH LOAD DATA

Plik danych, który próbuję wczytać, ma pole daty z datą w formacie DD-MON-YY HH:MM:SS. Kiedy załadować plik, używając polecenia LOAD DATA, baza pogubi i po prostu sprawia, że ​​wszystkie wpisy date do 0000-00-00 00:00:00 lub NULL

Oto test zrobiłem używając STR_TO_DATE opcję i to nie działa.

testu plik_we (test_temp.csv)

c1, c2 
07-JUN-12 22:50:19, "abc" 
07-JUN-13 22:50:19, "bcd" 

Tabela Test (temp_test) Polecenie obciążenia

describe temp_test; 
+-------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+-------------+------+-----+---------+-------+ 
| c1 | datetime | YES |  | NULL |  | 
| c2 | varchar(10) | YES |  | NULL |  | 
+-------+-------------+------+-----+---------+-------+ 

danych:

load data 
infile '/var/lib/mysql/DataSet-1/temp_test.csv' 
ignore 
into table temp_test 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\r\n' 
ignore 1 lines 
(@var_c1,c2) 
set c1 = STR_TO_DATE(@var_c1,'%d-%b-%y %h:%i:%s'); 

Wyjście

Query OK, 2 rows affected, 2 warnings (0.00 sec) 
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 

MySQL> show warnings; 
+-------+------+-------------------------------------------------------------------------+ 
| Level | Code | Message                 | 
+-------+------+-------------------------------------------------------------------------+ 
| Error | 1411 | Incorrect datetime value: '07-JUN-12 22:50:19' for function str_to_date | 
| Error | 1411 | Incorrect datetime value: '07-JUN-13 22:50:19' for function str_to_date | 
+-------+------+-------------------------------------------------------------------------+ 

MySQL> select * from temp_test; 
+------+------+ 
| c1 | c2 | 
+------+------+ 
| NULL | abc | 
| NULL | bcd | 
+------+------+ 

Czy problem z datą

  1. Wejście kolumny (powinna być 07-JUN-12 lub 07-Jun-12) lub
  2. Z moją ciągu formatu (%d-%b-%y) lub
  3. coś innego?
+2

podobny do http://stackoverflow.com/questions/10102167/load-data-infile-easily-convert-yyyymmdd-to-yyyy-mm-dd – zamnuts

+0

przykro mi link daliście nie rozwiązuje problemu. Stworzyłem mały test, aby pokazać problem: – smarisetti

Odpowiedz

8

Twój ciąg formatu dla STR_TO_DATE() jest nieprawidłowy. Godziny w przykładowych danych mają format 24-godzinny (%H lub %k) zamiast 12-godzinnego (%h). Możesz zobaczyć wszystkie możliwe specyfikatory formatu daty: here.

Zmień

%d-%b-%y %h:%i:%s 

do

%d-%b-%y %H:%i:%s 
     ^^ 

Twoja wypowiedź może wyglądać następująco

LOAD DATA INFILE '/path/to/temp_test.csv' 
IGNORE INTO TABLE temp_test 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' -- or '\n' 
    IGNORE 1 LINES 
(@c1, c2) 
SET c1 = STR_TO_DATE(@c1,'%d-%b-%y %H:%i:%s'); 

Po załadowaniu z danymi przykładowymi

 
mysql> select * from temp_test; 
+---------------------+------+ 
| c1     | c2 | 
+---------------------+------+ 
| 2012-06-07 22:50:19 | abc | 
| 2013-06-07 22:50:19 | bcd | 
+---------------------+------+ 
2 rows in set (0.00 sec) 
+0

@smarisetti Czy to pomogło? – peterm

2

Ponieważ miałem podobny problem, ale przychodzące format daty był inny, o to co byś zrobił, powinien przychodzące format daty jest następujący,

Sample data wejścia format

Tuesday, May 24, 2016 
Wednesday, May 25, 2016 

Ty musiałby użyć innego formatu daty,

%W, %b %d, %Y 

Tu jest link do mysql documentation i list of date formats, ale krótko,

Data część,

%Y Year, numeric, four digits 
%y Year, numeric (two digits) 
%c Month, numeric (0..12) 
%m Month, numeric (00..12) 
%M Month name (January..December) 
%b Abbreviated month name (Jan..Dec) 
%d Day of the month, numeric (00..31) 
%e Day of the month, numeric (0..31) 
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, ?-) 

codzienne

%W Weekday name (Sunday..Saturday) 
%a Abbreviated weekday name (Sun..Sat) 
%w Day of the week (0=Sunday..6=Saturday) 
%j Day of year (001..366) 

Czas

%T Time, 24-hour (hh:mm:ss) 
%r Time, 12-hour (hh:mm:ss followed by AM or PM) 
%H Hour (00..23) 
%h Hour (01..12) 
%I Hour (01..12) 
%k Hour (0..23) 
%l Hour (1..12) 
%i Minutes, numeric (00..59) 
%S Seconds (00..59) 
%s Seconds (00..59) 
%f Microseconds (000000..999999) 
%p AM or PM 

Istnieją inne wzory, które nie zostały wymienione powyżej.

LOAD DATA INFILE '/path/to/temp_test.csv' 
IGNORE INTO TABLE temp_test 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' #use '\n' for linux 
    IGNORE 1 LINES 
(@var_col1, col2) 
SET col1 = STR_TO_DATE(@var_col1,'%d-%b-%y %H:%i:%s'); 
0
LOAD DATA INFILE '/path/to/temp_test.csv' 
IGNORE INTO TABLE temp_test 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' -- or '\n' 
    IGNORE 1 LINES 
(@c1, c2) 
SET c1 = IF(CHAR_LENGTH((@c1)) = 0, NULL, (CONCAT(SUBSTRING(@c1e,7,4),SUBSTRING(@c1,3,4),SUBSTRING(@c1,1,2),SUBSTRING(@c1,11,9)))); 
+0

Proszę sformatować swój kod, jest on nieczytelny. – VPK

Powiązane problemy