【问题标题】:PHP Date column does not populate from csv filePHP 日期列不从 csv 文件填充
【发布时间】:2014-04-04 11:00:36
【问题描述】:

我正在尝试将 csv 文件导入表中。当我运行查询时,date_altered 列没有正确填充。

插入查询:

xtc_db_query("
        LOAD DATA INFILE '".$bpmand."'
        INTO TABLE bpmand_update
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\r\n'
        (@skip, customers_id, @skip, @skip, date_altered, @skip)
        ");

其他信息 -

表创建:

$createtable = '    
        CREATE TABLE bpmand_update
        (
        orders_id int(11),
        customers_id int(11),
        bonuspoints_received int(11),
        bonuspoints_spent int(11),
        current_bonuspoints int(11),
        date_altered datetime,
        comment varchar(50));';
    xtc_db_query($createtable);

csv 文件如下所示:

"1260","13-11-2013 11:45:45"
"5222","09-01-2014 11:45:45"

编辑: 如果我进入 phpmyadmin 并运行

INSERT INTO bpmand_update (customers_id, date_altered) VALUES ("1260","13-11-2013 11:45:45")

一切都好

【问题讨论】:

  • 日期时间格式值应为Y-m-d H:i:s
  • 不明确的日期格式:09-01-2014 是 9 月 1 日还是 1 月 9 日? 2014-01-09 格式消除了歧义,现在是 1 月 9 日
  • 日期格式没问题
  • @user986959 日期格式明显不行,不然不会有这个问题

标签: php mysql csv


【解决方案1】:

SQL 需要日期格式为YYYY-MM-DD HH:MM:SS,您可以使用DD-MM-YYYY HH:MM:SS。所以你需要沿着this StackOverflow answer的行修改你的SQL语句如下:

    LOAD DATA INFILE '".$bpmand."'
    INTO TABLE bpmand_update
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
    LINES TERMINATED BY '\r\n'
    (@skip, customers_id, @skip, @skip, @date, @skip)
    SET date_altered = STR_TO_DATE(@date,'%d-%m-%Y %H-%i-%s')

【讨论】:

  • +1 用于实际提供易于实施的解决方案,而不是简单地识别问题
【解决方案2】:

在您的 CSV 文件中,日期时间值的格式应为 YYYY-MM-DD HH:MM:SS 而不是 13-11-2013 11:45:45。所以你需要将日期值转换为 MySQL 接受的格式

DATETIME 值采用YYYY-MM-DD HH:MM:SS 格式。

参考:https://dev.mysql.com/doc/refman/5.0/en/datetime.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2019-08-16
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2013-11-25
    相关资源
    最近更新 更多