将时间和日期转换为mysql日期时间
问题描述:
我在我的数据库中使用以下格式的日期September 20, 2011 18:00:00
但是,如果我想在mysql中应用日期函数就像删除此日期或更早的记录一样无效。正确的格式要做到这一点需要2011-09-20 18:00:00
。将时间和日期转换为mysql日期时间
那么任何简单的方法来将第一个日期转换为第二个日期?或者是否更容易在表中为日期时间格式创建另一个字段?
答
$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;
您应该将日期保存为'datetime'格式,而不是'varchar'。保存数据,而不是演示。 – JJJ
当然,我的愚蠢。菜鸟misstake – halliewuud