我有一个csv文件,里面有几千个游戏日期,但它们都是MM / DD / YYYY格式
2/27/2011,3:05 PM,26,14
(26和14是团队ID #s),并尝试将它们放入SQL中,这样只会导致将0000-00-00放入我的表的日期字段中。这是我尝试使用的命令:
LOAD DATA LOCAL INFILE 'c:/scheduletest.csv' INTO TABLE game
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(`date`, `time`, `awayteam_id`, `hometeam_id`);
但同样,它不会做正确的日期。有没有办法让它在尝试插入日期时转换日期?我找到了另一个类似于此的SO question,但我无法让它发挥作用。
答案 0 :(得分:8)
您是否尝试过以下操作:
LOAD DATA LOCAL INFILE 'c:/scheduletest.csv' INTO TABLE game
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(@DATE_STR, `time`, `awayteam_id`, `hometeam_id`)
SET `date` = STR_TO_DATE(@DATE_STR, '%c/%e/%Y');
有关更多信息,文档中有关于user variables with LOAD DATA的使用的详细信息(大约一半 - 在页面中搜索“SET子句中的用户变量”)
答案 1 :(得分:1)
在插入之前,您可以使用变量将csv中的数据加载到它们并在其上运行函数,例如:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(@datevar, @timevar, awayteam_id, hometeam_id)
SET date = STR_TO_DATE(@datevar, '%m/%d/%Y'),
SET time = etc etc etc;
答案 2 :(得分:0)
我的建议是将文件插入临时保存表,其中date列是字符数据类型。然后使用STR_TO_DATE
转换编写查询,将数据从保留表移动到最终目的地。
答案 3 :(得分:0)
将您用于日期的字段转换为varchar类型,以便它可以使用任何格式播放友好
导入CSV
使用以下内容将日期转换为有效的mysql日期格式:
UPDATE table SET field = STR_TO_DATE(field, '%c/%e/%Y %H:%i');
答案 4 :(得分:0)
使用函数根据需要转换格式。
我不是MySQL专家,但http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date看起来很有希望。
如果您不能直接在load命令中执行此操作,则可以尝试创建一个表,允许您将所有值加载为VARCHAR
,然后插入game
表使用带有适当转换的select语句。
答案 5 :(得分:0)
如果文件不是太大,可以使用Excel函数TEXT。例如,如果您的日期在单元格A2中,则其旁边的临时列中的公式将为= TEXT(A2,“yyyy-mm-dd hh:mm:ss”)。这样就可以了,然后你可以将公式结果的值粘贴回列中,然后删除临时列。