Как обновить только час из поля DATETIME в MySQL?
Я хочу обновить столбец DateTime, где он изменит часы, не изменяя ничего. Я не могу использовать, чтобы добавить интервал, поскольку значения все разные. Существует много разных дат. Поэтому необходимо изменить час точной нужной даты, когда условие.
Пример:
*************************************************
** Before *|* After **
************************|************************
** 2017-07-24 19:06:15 *|* 2017-07-24 15:06:15 **
** 2017-07-24 17:12:23 *|* 2017-07-24 15:12:23 **
** 2017-07-24 23:00:03 *|* 2017-07-24 15:00:03 **
** 2017-07-24 20:33:56 *|* 2017-07-24 15:33:56 **
** 2017-07-24 18:19:31 *|* 2017-07-24 15:19:31 **
** 2017-07-24 16:43:47 *|* 2017-07-24 15:43:47 **
*************************************************
Хотите сделать это с запросом MySQL без использования какого-либо языка программирования.
Ответы
Ответ 1
SQL
UPDATE datetimes
SET datetime = DATE_ADD(datetime,
INTERVAL (15 - HOUR(datetime)) HOUR);
Demo
http://rextester.com/JOJWJ94999
Объяснение
DATE_ADD(datetime, INTERVAL
интервал HOUR)
добавляет или вычитает интервал часов от datetime
(в зависимости от того, является ли интервал положительным или отрицательным), Количество часов для добавления или вычитания рассчитывается путем вычитания числа час-тины datetime
(найдено из HOUR(datetime)
) из 15. Если текущее время равно 16:00 или после, это будет отрицательным, и если текущий время до 15:00, это будет положительное число. Нет предложения WHERE
, поэтому все строки в таблице будут обновлены.
Ответ 2
выглядит как MySQL DATETIME - изменение только даты
UPDATE tabelname
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s'))
WHERE id = 123;
Где 7 обозначает новый час, который вы хотите для этой записи datetime column
Ответ 3
Вы можете использовать DATE_FORMAT() и "hardcode" в часе:
UPDATE some_table SET dt = DATE_FORMAT(dt, '%Y-%m-%d 15:%i:%s');
Демо: http://rextester.com/RJESF70894
Если вы хотите связать час как параметр в подготовленном операторе, вы можете объединить его с REPLACE()
:
UPDATE some_table SET dt = DATE_FORMAT(dt, REPLACE('%Y-%m-%d %H:%i:%s', '%H', ?))
Демо: http://rextester.com/OHUKF73552
Ответ 4
Вы можете использовать нижеприведенный запрос, надеясь, что он вам поможет:
UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');
В этом запросе 15 обозначает новый час, который требуется для записи