MySQL 导入 CSV、转换日期格式 - 最佳实践

标签 mysql datetime csv import

我正在编写一系列 SQL 脚本来导入 CSV 格式的大型数据集。我知道语法:

STR_TO_DATE('1/19/2013 5:11:28 PM', '%c/%e/%Y %l:%i:%s %p')

将正确转换传入的日期/时间字符串,如下所示:

2013-01-19 17:11:28

我引入的一个数据集有 240,000 条记录,78 个字段/列,其中至少 16 个列是 DATETIME 字段。 我将使用不同的数据集定期执行此导入。 对于每次导入,我都会重命名备份表,并从干净、空的新表开始。 我的问题是:就最佳实践而言,哪种进口方式更好?

  1. 在我使用 LOAD DATA LOCAL INFILE 引入日期时执行日期转换
  2. 使用 LOAD DATA... 将所有数据导入 VARCHAR 字段,然后返回并分别转换 16 列中的每一列

认为我可以编写脚本来使用任一方法,但我正在寻求关于哪种方法“更好”的反馈。

最佳答案

您可以通过几个简单的过程转换所有列:

  1. 按原样导入数据,将临时日期存储在 VARCHAR 列中。
  2. 使用 ALTER TABLE 以正确的 DATEDATETIME 格式创建日期列。
  3. 使用 UPDATE TABLE 将原始列转换为 DATETIME 列。
  4. 删除原来的原始列。

另一种方法是在导入之前预处理 CSV 文件,这可以避免所有这些问题。

关于MySQL 导入 CSV、转换日期格式 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843353/

相关文章:

mysql - 为什么我有 "Can' t create table '.\matchingup.frm' (errno : 150)"for such a simple table

python - 如何比较Python pandas中的日期差异

python - 在python中分割一个大的制表符分隔文件

mysql - 在 MySQL 中从 varchar 列获取的最大值不超过 999

php - 使用 PHP 在表中显示 MySQL 数据库 BLOB 图像

python - Pandas:按日期对一列进行分组并计算另一列中特定值的累计数

MySQL 选择给定日期位于表中存储的日期之间的行

java - 如何将数组写入具有列分隔值的文件

mysql - 使用 Rubygems 将 CSV 文件数据加载到 Mysql

Mac 上的 MySQL 表 "in use",可在 Windows 上使用