使用LOAD DATA INFILE时,将CSV时间戳导入MySQL可接受的格式

时间:2014-05-07 20:43:50

标签: php mysql sql csv

我有一个CSV文件,其时间戳格式如下

 timestamp,             day_chan2, day_chan3
01/02/2014 00:00,             9,    2
01/02/2014 00:00,            16,    5

我正在尝试使用LOAD DATA INFILE将其导入MySQL数据库

$query_name = "LOAD DATA INFILE ' "
                                . $file_path . 
                                "' INTO TABLE '"
                                . $this->table_name . 
                                 " ' FIELDS TERMINATED BY '\,' 
                                 LINES TERMINATED BY '\\n' 
                                 IGNORE 1 LINES 
                                 (`time_stamp`,`day_chan2`,`day_chan3`)";

我的问题如下:如何将时间戳转换为我的MySQL可接受的格式,同时将其导入数据库?

我现在对如何将时间戳更改为适当的时间戳我无能为力,以后可以使用它来查询。

2 个答案:

答案 0 :(得分:1)

我从来没有尝试过这个,但你可以做类似的事情:

$query_name = "LOAD DATA INFILE ' "
                                . $file_path . 
                                "' INTO TABLE '"
                                . $this->table_name . 
                                 " ' FIELDS TERMINATED BY '\,' 
                                 LINES TERMINATED BY '\\n' 
                                 IGNORE 1 LINES 
                                 (@mytimestamp,`day_chan2`,`day_chan3`)
                                 SET time_stamp=STR_TO_DATE(@mytimestamp, '%d/%m/%Y %h:%i');"

MySQL文档中有这样的例子:

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 1 :(得分:0)

MySQL STR_TO_DATE可能是最好的方法,鉴于你的评论,见下文......

if (!($stmt = $mysqli->prepare("INSERT INTO ". $this->table_name . "(`time_stamp`,`day_chan2`,`day_chan3`) VALUES (STR_TO_DATE(?, 'd/m/y H:M'),?,?)"))) {
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
for ($fields in $data) {
   $stmt->bind_param('i', $fields[0]);
   $stmt->bind_param('i', $fields[1]);
   $stmt->bind_param('i', $fields[2]);
   if (!$stmt->execute()) {
      echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
   }
}

祝你好运,如果你需要进一步的帮助,请发表评论。