带有LOAD DATA LOCAL INFILE的MySQL DATE和BIGINT

时间:2011-03-12 17:04:48

标签: mysql sql load-data-infile

亲爱的, 我正在开发一个Java脚本,能够将历史市场数据从文件加载到MySQL表,其中每个数据记录包含'date'和'timestamp'字段。通常的记录表示为:

01/11 / 2010,10:00:00.007,P,210.8,210.86,6,2,R ,, 2486662,P,P ,, 0,...,N 1月11日/ 2010,10:00:00.577,W,210.51,211.61,1,1,R ,, 2487172,W,W ,, 0,...,N

其中第一列表示'date',第二列表示'timestamp'(以毫秒为单位)。由于MySQL不支持毫秒粒度,我使用'timestamp'字段的BIGINT(长)表示。

目前加载查询如下:

LOAD DATA LOCAL INFILE 'path to file' 
INTO TABLE table
FIELDS TERMINATED BY ','
(@date, @time, remaining columns ...)
SET date=STR_TO_DATE(@date, '%m/%d/%Y'),
SET time=UNIX_TIMESTAMP( STR_TO_DATE(@time, '%H:%i:%S.%f') )

除了最后一行(抛出SQLExceptions)之外,查询工作正常。我尝试了不同的格式模式,但在转换为unix时间戳之前,在从字符串到时间戳的转换中遇到了问题。谷歌也没有帮助。如果有人能提出合理的解决方案,我真的很感激。不幸的是,将MySQL更改为其他数据库不是一种选择。

此致

1 个答案:

答案 0 :(得分:0)

UNIX_TIMESTAMP想要一个“日期时间”字符串 - 你给它一个“时间”字符串。

select UNIX_TIMESTAMP(CONCAT(STR_TO_DATE("01/11/2010", "%m/%d/%Y"), " ", STR_TO_DATE("10:00:00.577", "%H:%i:%S.%f")));