将时间和日期转换为mysql日期时间

将时间和日期转换为mysql日期时间

问题描述:

我在我的数据库中使用以下格式的日期September 20, 2011 18:00:00 但是,如果我想在mysql中应用日期函数就像删除此日期或更早的记录一样无效。正确的格式要做到这一点需要2011-09-20 18:00:00将时间和日期转换为mysql日期时间

那么任何简单的方法来将第一个日期转换为第二个日期?或者是否更容易在表中为日期时间格式创建另一个字段?

+2

您应该将日期保存为'datetime'格式,而不是'varchar'。保存数据,而不是演示。 – JJJ

+0

当然,我的愚蠢。菜鸟misstake – halliewuud

$s = 'September 20, 2011 18:00:00'; 
$unix_timestamp = strtotime($s); 
$mysql_timestamp = date('Y-m-d H:i:s',$unix_timestamp); // now looks like '2011-09-20 18:00:00' 

我不知道如何直接在mysql中完成它,但是你可以创建一个助手脚本。以下

伪代码:

$data = db_query("SELECT id, date FROM footable"); 

foreach ($data => $item) { 
    // repeat line below for all months 
    $new_item string_replace($item, "September", 9) 
    $new_date = regex_replace($new_item, 
    "([0-9]{1,2}) ([0-9]{1,2}), ([0-9]{4}) (.*)", 
    "$3-$2-$1 $4"); 
    db_query("UPDATE footable SET date = $newdate"); 
} 

我没有看到所有的MySQL的答案。 :)

假设你的“日期时间”字段被称为“DT”,你可以先格式化字符串到的东西MySQL将识别为DATETIME的字符串格式,然后改变其更改为正确的类型(DATETIME)该列的类型。如果您或我的拼写错误在下面,请备份方便。

SET sql_mode=ansi; -- for || operator 

UPDATE tbl SET dt = LEFT(SUBSTRING_INDEX(dt, ' ', -2), 4)   -- YYYY 
        || '-' 
        || LPAD(FIELD(SUBSTRING_INDEX(dt, ' ', 1),  -- MM 
            'January', 'February', 'March', 
            'April', 'May', 'June', 'July', 
            'August', 'September', 'October', 
            'November', 'December'), 
          2, '0') 
        || '-' 
        || LPAD(SUBSTRING_INDEX(      -- DD 
             SUBSTRING_INDEX(dt, ',', 1), 
          ' ', -1), 2, '0') 
        || ' ' 
        || SUBSTRING_INDEX(dt, ' ', -1);     -- hh:mm:ss 

ALTER TABLE tbl CHANGE dt dt DATETIME;