Как обновить только час из поля 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 без использования какого-либо языка программирования.

4 ответа

Вы можете использовать функцию DATE_FORMAT() и " жесткий код " часа:

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

SQL

UPDATE datetimes
SET datetime = DATE_ADD(datetime,
                        INTERVAL (15 - HOUR(datetime)) HOUR);

демонстрация

http://rextester.com/JOJWJ94999

объяснение

DATE_ADD(datetime, INTERVALинтервалHOUR) добавляет или вычитает интервал часов из datetime (в зависимости от того, является ли интервал положительным или отрицательным). Количество часов, которое нужно сложить или вычесть, рассчитывается путем вычитания количества часов из datetime (найдено из HOUR(datetime)) из 15. Если текущее время 16:00 или позже, оно будет отрицательным, а если текущее время до 15:00, оно будет положительным числом. Здесь нет WHERE предложение, чтобы все строки в таблице были обновлены.

Похоже на MySQL DATETIME - изменить только дату

UPDATE tabelname 
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s')) 
WHERE id = 123;

Где 7 означает новый час, который вы хотите для столбца datetime этой записи

Вы можете использовать приведенный ниже запрос, надеюсь, он вам поможет:

UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');

В этом запросе 15 обозначает новый час, который вы хотите записать

Другие вопросы по тегам