2010-02-10 33 views
15

Tôi đang sử dụng câu lệnh SQL LOAD DATA LOCAL INFILE SQL của MySQL để tải dữ liệu từ tệp CSV vào bảng cơ sở dữ liệu hiện có.Cách thay đổi ngày chuỗi thành định dạng ngày tháng MySQL tại thời điểm nhập CSV bằng cách sử dụng MySQL LOAD DATA LOCAL INFILE

Dưới đây là một tuyên bố dụ SQL:

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

Cột thứ ba trong CSV mà các bản đồ đến lĩnh vực DateOfBirth hiện có ngày theo định dạng sau:

14-Feb-10 

Làm thế nào tôi có thể sửa đổi câu lệnh SQL ở trên để định dạng ngày thành định dạng ngày của MySQL tức là 2010-02-14?

tôi biết làm thế nào để chuyển đổi một chuỗi ngày khi sử dụng cú pháp INSERT bình thường sử dụng:

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

Trả lời

23

Bạn cần phải sử dụng mệnh đề SET, cùng với một biến để tham khảo các nội dung của hàng tại cột đó . Trong danh sách cột của bạn, bạn chỉ định cột ngày của bạn cho một tên biến. Sau đó, bạn có thể sử dụng nó trong câu lệnh SET của mình. (Lưu ý, tôi đã không nhận được MySQL trước mặt tôi để kiểm tra điều này trê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') 

Xem ví dụ về một đường xuống trang tại địa chỉ: http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html (Không chắc chắn tại sao trang này dường như khác với các tài liệu chính trong rằng nó thực sự chứa một ví dụ về việc sử dụng SET)

+0

Có lẽ có lẽ là giả tưởng, nhưng tôi nghĩ rằng phải là% m thay vì% M ... – Everyone

+2

@Mọi người cảm ơn. Trên thực tế, có vẻ như nó phải là '% b', cho tên tháng viết tắt, theo ví dụ được đưa ra trong câu hỏi. –

+0

Bạn nói đúng. Lỗi của tôi. – Everyone

4

một quá trình hơi dài hơn cung cấp cho bạn một chút thử nghiệm linh hoạt:.

  • sử dụng một VARCHAR (64) cột callsed ví dụ. mydate_text để giữ ngày chưa định dạng mà bạn nhập.
  • tải lên/nhập bảng đưa ngày vào lĩnh vực này plain text
  • Chạy một truy vấn như

    UPDATE SET mytable mydate = STR_TO_DATE (mydate_text, '% Y-% b% d')

  • Nếu tất cả có vẻ OK, hãy thả cột mydate_text

  • Nếu không OK, chỉ cần thử lại bằng định dạng mới.

Lợi thế của kỹ thuật này là nó cho phép bạn chơi xung quanh với các định dạng mà không phải nhập lại bảng bằng cú pháp MySQL LOAD DATA hơi phức tạp, đặc biệt là với các cột có chiều dài bảng. Nếu bạn biết chính xác những gì bạn đang làm, câu trả lời ở trên là tốt nhất. Nếu bạn không phải là một chuyên gia trong MySQL, kỹ thuật này có thể hữu ích cho đến khi bạn nhận được các định dạng của bạn chính xác.

Các vấn đề liên quan