将时间和日期转换为mysql datetime
我在数据库中有一个日期,格式如下2011年9月20日18:00:00 但是,如果我想在mysql中应用日期函数,比如删除具有此日期或更早日期的记录,那么这将不起作用。执行此操作的正确格式必须是将时间和日期转换为mysql datetime,mysql,datetime,Mysql,Datetime,我在数据库中有一个日期,格式如下2011年9月20日18:00:00 但是,如果我想在mysql中应用日期函数,比如删除具有此日期或更早日期的记录,那么这将不起作用。执行此操作的正确格式必须是2011-09-20 18:00:00 那么,有没有简单的方法将第一个日期转换为第二个日期?或者在表中为datetime格式创建另一个字段更容易吗?我不知道如何直接在mysql中创建,但您可以创建一个帮助器脚本 伪代码如下: $data = db_query("SELECT id, date FROM fo
2011-09-20 18:00:00
那么,有没有简单的方法将第一个日期转换为第二个日期?或者在表中为datetime格式创建另一个字段更容易吗?我不知道如何直接在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");
}
我没有看到一个完整的答案。:) 假设“datetime”字段名为“dt”,您可以将其更改为适当的类型(
datetime
),方法是首先将字符串重新格式化为MySQL将识别为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
。保存数据,而不是演示文稿。当然,我真蠢。。新手失误
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;