web-dev-qa-db-fra.com

Comment mettre à jour uniquement l'heure à partir d'un champ DATETIME dans MySQL?

Je veux mettre à jour une colonne DateTime où elle ne changera les heures que sans rien changer d'autre. Je ne peux pas utiliser pour ajouter un intervalle car les valeurs sont toutes différentes. Il y a aussi beaucoup de dates différentes. Il faut donc changer l'heure de la date exacte souhaitée comme condition.

Ex:

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

Vous voulez le faire avec une requête MySQL uniquement sans utiliser de langage de programmation.

15
M.A.K. Ripon

[~ # ~] sql [~ # ~]

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

Démo

http://rextester.com/JOJWJ94999

Explication

DATE_ADD(datetime, INTERVAL intervalleHOUR) Ajoute ou soustrait intervalle heures à partir de datetime (selon que intervalle est positif ou négatif). Le nombre d'heures à ajouter ou à soustraire est calculé en soustrayant la partie du nombre d'heures de datetime (trouvée à partir de HOUR(datetime)) de 15. Si l'heure actuelle est 16h00 ou après, cette sera négatif et si l'heure actuelle est avant 15h00, ce sera un nombre positif. Il n'y a pas de clause WHERE, donc toutes les lignes de la table seront mises à jour.

12
Steve Chambers

Vous pouvez utiliser la fonction DATE_FORMAT () et "hardcode" l'heure:

UPDATE some_table SET dt = DATE_FORMAT(dt, '%Y-%m-%d 15:%i:%s');

Démo: http://rextester.com/RJESF70894

Si vous souhaitez lier l'heure comme paramètre dans une instruction préparée, vous pouvez la combiner avec REPLACE():

UPDATE some_table SET dt = DATE_FORMAT(dt, REPLACE('%Y-%m-%d %H:%i:%s', '%H', ?))

Démo: http://rextester.com/OHUKF73552

11
Paul Spiegel

ressemble à MySQL DATETIME - Changer uniquement la date

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

Où 7 représente la nouvelle heure souhaitée pour la colonne datetime de cet enregistrement

6
Ivo P

Vous pouvez utiliser la requête ci-dessous, j'espère que cela vous aidera:

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

Dans cette requête 15 représente la nouvelle heure que vous souhaitez pour l'enregistrement

4
Pradeep Rajput