2

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

示例:start_time、end_time、start_date、end_date .. 看起来像 7:30 PM、11:00PM、9/9/12、11/22/12,然后是一些正常的行。不幸的是,我无法将整个表格转换为更好的格式,因为有人基于这种糟糕的所谓表格设计的很多功能。唯一真正适合它的是,该表对于我可以与某物关联的每一行都有一个自动递增的 ID。因此,我认为这是修补事物的一种手段,而我们修复了许多将事物分开的功能,而我可以在其他所有事物上搭建桥梁。

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

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

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

4

2 回答 2

2

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

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

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。我不知道这是否是您的拼写错误,或者您的数据是否确实如此变化,如果确实如此,那么我会添加一个检查并插入空格。

于 2012-10-10T06:52:20.093 回答
1

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

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

  2. 创建一个 PHP 文件。

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

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

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

  6. 在新表中插入新值。

于 2012-10-10T06:50:13.093 回答