如何仅更新 MySQL 中 DATETIME 字段的小时数?
How to update only the hour from a DATETIME field in MySQL?
我想更新 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 查询而不使用任何编程语言。
看起来像 MySQL DATETIME - Change only the date
UPDATE tabelname
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s'))
WHERE id = 123;
其中 7 代表您希望此记录的日期时间列的新小时
您可以使用以下查询,希望对您有所帮助:
UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');
在此查询中,15 代表您想要记录的新小时
SQL
UPDATE datetimes
SET datetime = DATE_ADD(datetime,
INTERVAL (15 - HOUR(datetime)) HOUR);
演示
http://rextester.com/JOJWJ94999
说明
DATE_ADD(datetime, INTERVAL
间隔HOUR)
加减间隔从 datetime
起 小时(取决于 interval 是正数还是负数。加或减的小时数是用15减去datetime
的小时数部分(从HOUR(datetime)
中找到)计算出来的。如果当前时间是16:00或之后,这将为负数,如果当前时间在 15:00 之前,则为正数。没有 WHERE
子句,因此 table 中的所有行都将被更新。
您可以使用 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', ?))
我想更新 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 查询而不使用任何编程语言。
看起来像 MySQL DATETIME - Change only the date
UPDATE tabelname
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s'))
WHERE id = 123;
其中 7 代表您希望此记录的日期时间列的新小时
您可以使用以下查询,希望对您有所帮助:
UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');
在此查询中,15 代表您想要记录的新小时
SQL
UPDATE datetimes
SET datetime = DATE_ADD(datetime,
INTERVAL (15 - HOUR(datetime)) HOUR);
演示
http://rextester.com/JOJWJ94999
说明
DATE_ADD(datetime, INTERVAL
间隔HOUR)
加减间隔从 datetime
起 小时(取决于 interval 是正数还是负数。加或减的小时数是用15减去datetime
的小时数部分(从HOUR(datetime)
中找到)计算出来的。如果当前时间是16:00或之后,这将为负数,如果当前时间在 15:00 之前,则为正数。没有 WHERE
子句,因此 table 中的所有行都将被更新。
您可以使用 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', ?))