我正在使用 LOAD DATA INFILE 导入一个 csv 文件,文件日期格式为 29/11/2010
数据库格式为 2010-11-29
,什么我可以用来格式化查询中的日期吗?
我试过 str_to_date:
SET date_start = STR_TO_DATE(@from_date,'%Y-%m-%d'),
但这只会插入 0000-00-00
最佳答案
MySQL 4.x
LOAD DATA
将尝试按原样插入您的日期。它不知道格式,通常情况下你不能对你的字段应用一些后处理(好吧,不同于 LOAD DATA
语法本身允许的某些格式) - 你不能通过 SET
关键字调整您的值,就像在 MySQL 5.x
您可以执行以下步骤:
- 将表的列声明为
VARCHAR
。让它命名为record_date
- 执行您的
LOAD DATA
查询。它会将您的日期加载到record_date
列 - 向您的表中添加新列,让它成为
temp_date
- 类型为DATE
:ALTER TABLE t ADD temp_date DATE
- 更新您的
temp_date
列:UPDATE t SET temp_date = STR_TO_DATE(record_date, '%d/%m/%Y')
- 删除您的
VARCHAR
日期列:ALTER TABLE t DROP record_date
- 最后,将具有正确
DATE
类型的列重命名为原始列:ALTER TABLE t CHANGE temp_date record_date DATE
因此,您会将日期作为 DATE
日期类型加载到表中。将 record_date
替换为您的原始列的名称。
MySQL 5.x
您可以使用 SET
关键字和 native 替换过程,如上所述。所以就这样做:
LOAD DATA INFILE 'file.csv'
INTO TABLE t
(@date)
SET record_date=STR_TO_DATE(@date, '%d/%m/%Y')
-上面的示例是针对一列的,您需要添加其他列(如果它们存在)。日期列名称也是 record_date
- 因此也将其更改为实际名称。
关于mysql - mysql插入的格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374824/