Конвертировать время и дату в mysql datetime - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть дата в следующем формате в моей БД September 20, 2011 18:00:00 Но это не будет работать, если я хочу применить функции даты в MySQL, как удалить запись с этой датой или старше. Правильный формат для этого должен быть 2011-09-20 18:00:00.

Так есть ли простой способ конвертировать первую дату во вторую дату? Или проще сделать еще одно поле в таблице для формата datetime?

Ответы [ 3 ]

1 голос
/ 20 сентября 2011
$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'
0 голосов
/ 20 сентября 2011

Я не увидел полностью-MySQL ответ. :)

Предполагая, что ваше поле "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;
0 голосов
/ 20 сентября 2011

Я не знаю, как сделать это в 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...