具有3,000多条需要转换的记录的MySQL DB

时间:2012-10-10 06:16:35

标签: php mysql

我有一个数据库,这是通过phpmyadmin初始转储Excel文件。因此没有格式化或其他逻辑应用于表。所以我基本上留下了一个“varchar”样式行的表。其中包括日期和时间等内容。

实施例: start_time,end_time,start_date,end_date ..看起来像7:30 PM,11:00 PM,9/9 / 12,11 / 22/12,然后是一些很好的行,就像他们一样。不幸的是,我无法将整个表格转换为更好的格式,因为有人围绕这个糟糕的设计(称为表格)提供了大量功能。唯一真正适合它的是,表格每行都有一个自动递增的ID,我可以将其与某些东西相关联。所以我认为,当我们修复了许多将功能分开的所有功能以及其他所有可以构成各种桥梁的功能时,修补补丁的方法。

创建一个可以为数据类型提供适当类型行的表,然后能够在start_date上使用某些mysql功能(例如BETWEEN())来获取a-z列表但是列出有限列表。

所以我想弄清楚是否有一种方法可以将数据从一个表转储到下一个表但是在此查询的过程中将它转换为我想要的类型,例如datetime,将start_date和start_time组合成日期时间格式以及结束时间/日期?

或者这是我必须在堆中拉出来的东西,用PHP循环它并让它在新表中插入新行?

2 个答案:

答案 0 :(得分:2)

我会用PHP脚本读取原始数据,然后将其处理为正确的日期格式,然后插入新表格。

所以情况是,你有一个时间和日期分开,你想要组合它们,然后将它们格式化为DB可接受的日期格式。我会做这样的事情:

date_default_timezone_set('America/Los_Angeles');

// you have separate dates and times like this
$date = '9/9/12';
$time = '11:00 PM';

// combine them into one string
$str = $date . ' ' . $time;

$dt = DateTime::createFromFormat('n/j/y g:i A', $str);

$DBFormat = $dt->format('Y-m-d H:i:s');

echo $DBFormat;
// outputs DB date format -> 2012-09-09 23:00:00

我注意到的一件事是你的第一个例子是7:30 PM,下一个例子是11:00PM。在后一个示例中,PM之前没有空格。我不知道这是否是您的错误或者您的数据是否确实如此变化,如果确实如此,我会添加支票并插入空格。

答案 1 :(得分:1)

为此,您可以按照以下步骤操作:

  1. 在同一个数据库中创建一个新表,其中包含源表中的所有字段(要复制的表)。

  2. 创建一个PHP文件。

  3. 编写MYSQL查询以选择源表中的所有值。

  4. 在while循环中,编写一个查询以将这些行插入到新表中。

  5. 之前使用php中的“strtotime()和date()”函数将start_time,end_time,start_date,end_date列的值转换为所需的格式。

  6. 在新表中插入新值。