如何只更新MySQL中DATETIME字段的小时?

时间:2017-07-04 06:32:18

标签: mysql sql datetime hour date-manipulation

我想更新一个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 个答案:

答案 0 :(得分:11)

<强> SQL

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

<强>演示

http://rextester.com/JOJWJ94999

<强>解释

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

答案 1 :(得分:11)

您可以使用DATE_FORMAT()功能和&#34;硬编码&#34;小时:

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

答案 2 :(得分:6)

看起来像MySQL DATETIME - Change only the date

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

其中7代表您希望此记录的新日期&n;日期时间列

答案 3 :(得分:4)

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

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

在此查询中 15 代表您希望记录的新小时