【问题标题】:CSV to Mysql insert datetimeCSV 到 Mysql 插入日期时间
【发布时间】:2017-05-25 06:49:59
【问题描述】:

我有 CSV 文件,我想将 CSV 行插入 Mysql 数据库。 当我在 START DATE(format Datetime) 列中将“23.05.17 17:53:25”从 CSV 插入 DB 时,我得到 2023-25-17 17:53:25。

我如何转换它,在 DB 上得到正确的日期格式 2017-05-23 17:53:25

谢谢

【问题讨论】:

  • 来自@eskeli 回答 -> $ins="INSERT INTO stugayc (CHECKID,CHECKSTDATE,CHECKENDDATE ) VALUES(" . $row[0] . ", STR_TO_DATE(" . $row[1] . ", '%d.%m.%y %H:%i:%s'),'" . $row[2] . "')"; 这会起作用
  • 你可以使用STR_TO_DATE()

标签: php mysql csv datetime


【解决方案1】:

这可能不是一个正统的解决方案,但您可以简单地解析输入字符串并以 mysql 期望的格式重新创建日期时间。

// for each line in the csv
list($datePart, $timePart) = explode(' ', $fields['date']);
list($d, $m, $y) = explode('.', $datePart);
$dbDate = "$y-$m-$d $timePart";

添加一些输入验证会更好,但如果您正在做的是数据导入脚本,那没关系。

【讨论】:

  • 我尝试过,但我得到了 0000-00-00 00:00:00
【解决方案2】:

你应该使用STR_TO_DATEmysql函数:

mysql> SELECT STR_TO_DATE('23.05.17 17:53:25', '%d.%m.%y %H:%i:%s');

结果:

2017-05-23 17:53:25

您甚至可以使用时间字段的紧凑形式%T

mysql> SELECT STR_TO_DATE('23.05.17 17:53:25', '%d.%m.%y %T');

结果:

2017-05-23 17:53:25

【讨论】:

  • 这是我的插入代码 $ins="INSERT INTO stugayc (CHECKID,CHECKSTDATE,CHECKENDDATE ) VALUES('$row[0]','STR_TO_DATE('$ row[1]', '%d.%m.%y %H:%i:%s')','$row[2]' )";
  • 您应该考虑使用Prepared Statement 来防止 SQL 注入,但我认为它应该可以按预期工作。
  • 我做不到))
  • 我错了,你必须像这样从STR_TO_DATE函数中删除引号:$ins="INSERT INTO stugayc (CHECKID,CHECKSTDATE,CHECKENDDATE ) VALUES('$row[0]',STR_TO_DATE('$row[1]', '%d.%m.%y %H:%i:%s'),'$row[2]' )";
  • 请问我可以检查 csv 文件的值吗?示例 if($row=='2017-05-23 17:53:25') $row='';
猜你喜欢
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2011-02-25
  • 2012-01-23
  • 1970-01-01
  • 2016-08-20
相关资源
最近更新 更多