2016-03-08 4 views
1

У меня есть столбец с именем schedule_time (datetime). Я хочу преобразовать время в 24 часа.Преобразование столбца datetime в 24-часовой формат

2016-03-08 03:00:00 to 2016-03-08 15:00:00 
+2

Как вы знаете, что '03: 00: 00' действительно означает' 15: 00: 00'? Просто добавит 12 часов решить вашу проблему? – PerlDuck

ответ

0

Пожалуйста, обратите внимание, что значения DATETIME являются всегда хранится в 24-часовом формате (http://dev.mysql.com/doc/refman/5.7/en/datetime.html). Нет AM/PM. Если вы хотите дисплей значения, есть, однако DATE_FORMAT функция, которая будет форматировать значение в соответствии с вашими потребностями, в том числе AM/PM:

select DATE_FORMAT(schedule_time, '%Y-%m-%d %h:%i:%s %p') from t1; 

Это даст 2016-03-08 03:00:00 AM и 2016-03-08 03:00:00 PM. Но значения в БД все те же, в 24-м формате.

При добавлении 12 часов позволит решить проблему, то вы можете сделать это следующим образом:

start transaction; 

update t1 set schedule_time = date_add(schedule_time, interval 12 hour); 
select * from t1; -- verify!!! 

rollback; 
-- or commit; 

Я положил это в сделке, так что вы можете сначала проверить свои результаты. Если они ошибочны, просто откатите транзакцию (при условии, что вы используете таблицы InnoDB). Если у вас нет транзакций (или вам неловко с ними), вы можете отменить это изменение с помощью date_sub вместо date_add.

Но имейте в виду: Это не меняется с 12 до 24 часов, он просто добавляет 12 часов к всем вашим значениям schedule_time.

0

Использовать функцию MySQL DATE_FORMAT.

Строка формата будет «% Y-% m-% d% T '.

Выбор текущей даты с 24-часовым временем:

mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T') AS now +---------------------+ | now | +---------------------+ | 2016-03-08 20:47:04 | +---------------------+ 1 row in set (0.00 sec)

Выбор даты с 24-часовым времени из таблицы:

mysql> SELECT DATE_FORMAT(`created_at`, '%Y-%m-%d %T') AS created_at FROM test.comments; +---------------------+ | created_at | +---------------------+ | 2016-02-25 16:32:12 | +---------------------+ 1 row in set (0.00 sec)

+0

Согласно документам: _MySQL извлекает и отображает значения DATETIME в формате «YYYY-MM-DD HH: MM: SS», поэтому использование DATE_FORMAT ничего не изменит, если будет дан тот же формат. – PerlDuck

+0

Я не уверен, к чему вы клоните. Вы путаете даты типа типа с датами типа даты? –

+0

Не удивил бы меня, как я часто это делаю. Но столбец, о котором идет речь, schedule_time, уже есть DATETIME (OP писал это). – PerlDuck

Смежные вопросы