在php / mysql中将datetime数据类型转换为日期和时间数据类型

时间:2011-10-04 12:04:48

标签: php mysql datetime date time

我是新手。几天前我开始编写PHP代码。我想将php中的“datetime”数据类型复制到“date”和“time”数据类型的字段中。

我保留了datetime值的字段名datetime_info。它存在于try1表中。 date是“date”数据类型的字段名称,time是“time”数据类型的名称。这两个存在于try2表中。

这是我写的。

$result = mysql_query("SELECT * FROM try1");

while ($row = mysql_fetch_array($result))
{

    $result_update = mysql_query("INSERT INTO try2 (date, time) VALUES ('".$row_team['datetime_info']."', '".$row_team['datetime_info']."')");
    if (!$result_update)
    die('Error: ' . mysql_errno() . mysql_error());
}

“try1”表中存储的值为:

id  datetime_info
1   2008-10-02 00:00:00
2   2008-10-09 00:00:00

预期响应应该是存储在相应字段中的日期和时间。但是,输出是

id  date        time
2   0000-00-00  00:00:00
3   0000-00-00  00:00:00

任何人都可以解释我为什么以及如何解释?我尝试了很多网站,但没有找到任何正确的解释。谢谢你的期待。

此致 BasicGem

4 个答案:

答案 0 :(得分:4)

首先,您不必使用PHP来完成这方面的艰苦工作。 MySQL非常强大,可以独立完成这些任务。

由于您要将表try1中的所有行复制到try2(但拆分日期时间列),因此以下内容应该有效:

INSERT INTO
  `try2`
  SELECT
    null, DATE( `datetime_info` ), TIME( `datetime_info` )
  FROM
    `try1`

这样做:对于try1中找到的每条记录,将以下值插入try2

  • null表示使用auto_incrementid列的try2功能(假设id列确实是自动递增的主键字段)
  • DATE( `datetime_info` )表示使用datetime_info
  • try1列的DATE部分
  • TIME( `datetime_info` )表示使用datetime_info
  • try1列的TIME部分

只需执行mysql_query( $sql ),其中$sql是一个代表上述查询的字符串就足够了。不需要先用PHP循环任何结果。

我也会写一个PHP解决方案,但其他人已经这样做了。我会建议this answer

答案 1 :(得分:1)

$result = mysql_query("SELECT * FROM try1");

while ($row = mysql_fetch_array($result))
{
   $split = explode(' ', $row_team['datetime_info']);

   $result_update = mysql_query("INSERT INTO try2 (date, time) VALUES ('". $split[0]."', '".$split[1]."')");
    if (!$result_update)
    die('Error: ' . mysql_errno() . mysql_error());
}

答案 2 :(得分:1)

因为你把它变成一种格式并推动它适合另一种格式。 只需使用explode(),您就可以获得所需的两部分。

list($date, $time) = explode(' ', $row_team['datetime_info']);

答案 3 :(得分:0)

类型date的字段存储日期信息,即年,月和日(按此顺序)。 您可能已经猜到,time字段以小时:分钟:秒的格式存储时间信息。

如果你看看你做了什么,分别在datetime字段和date字段中插入time - MySQL无法识别格式(你正在通过数据格式与datetime字段的格式错误,因此会将其存储为默认日期值。

您需要将datetime_info列的输出解析为日期部分和时间部分,然后将其提供给mysql。