Как обновить только час из поля 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 обозначает новый час, который требуется для записи