16

我想更新一个 DateTime 列,它只会更改时间而不修改其他任何内容。我不能用来添加间隔,因为值都不同。也有许多不同的日期。因此需要将确切所需日期的时间更改为 where 条件。

前任:

*************************************************
**        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

4 回答 4

17

您可以使用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

于 2017-10-03T15:56:54.007 回答
15

SQL

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

演示

http://rextester.com/JOJWJ94999

解释

DATE_ADD(datetime, INTERVAL间隔HOUR)增加或减去间隔小时datetime(取决于间隔是正数还是负数)。添加或减去的小时数是通过从 15 中减去datetime(从 中找到HOUR(datetime))的小时数来计算的。如果当前时间是 16:00 或之后,这将是负数,如果当前时间在 15:00 之前,它将是一个正数。没有WHERE子句,因此表中的所有行都将被更新。

于 2017-10-03T12:20:20.267 回答
6

看起来像MySQL DATETIME - 仅更改日期

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

其中 7 代表此记录的日期时间列所需的新小时

于 2017-07-04T07:07:54.513 回答
4

您可以使用以下查询,希望它能帮助您:

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

在此查询中, 15代表您想要记录的新小时

于 2017-10-03T11:30:08.213 回答