mysql - mysql插入的格式化日期

标签 mysql sql date

我正在使用 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/

相关文章:

mysql - 数据库设计: How to allow for peer orders aka Model a baseball trading card trade

mysql - 使用触发器更新另一个数据库中的表

java - Java中是否可以获取格式化的日期对象

MySQL 加入 : Omit ALL repeating rows IF one row meets a condition

PHP 博客条目未提交到 MySQL 数据库

c# - 在中间不执行其他命令的情况下执行 2 个 SQL 命令的正确方法

sql - Oracle审计删除: how to audit what was deleted?

sql - MS SQL Server 中的批量增量序列

java - 解析日期 - Java

javascript - 如何比较javascript中的日期?