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.
[~ # ~] 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.
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', ?))
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
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