Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将时间和日期转换为mysql datetime_Mysql_Datetime - Fatal编程技术网

将时间和日期转换为mysql datetime

将时间和日期转换为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年9月20日18:00:00 但是,如果我想在mysql中应用日期函数,比如删除具有此日期或更早日期的记录,那么这将不起作用。执行此操作的正确格式必须是
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;