Voilà,
j'utilise une station météo qui stocke les données dans une base mysql.
J'ai donc une table appelée Meteo qui contient les colonnes suivantes (enfin, je ne recopie ici que les 3 premières)
1 2
| date time temperature
2014-02-01 17:07:00 4.2 |
Ma problématique est que je veux utiliser un deuxième logiciel pour générer des graphiques qui viendrait donc piocher dans cette base de données.
Or, ce dernier n'arrive pas à reconnaître le format date / heure de mysql.
Au lieu d'un champ date et d'un champ heure, ce programme souhaite un champ unique de la forme YYYYMMDDhhmmss
Au niveau du premier logiciel, je ne peux modifier sa façon dont il vient écrire la date et l'heure dans la base de données.
C'est là où je patauge, car je ne maîtrise pas SQL....
La solution passerait par une colonne supplémentaire avec la date/heure au bon format (ex: 20140201183000).
J'ai donc ajouté une colonne supplémentaire nommée "datetime2".
Dans un premier temps, j'ai essayé un trigger qui va remplir cette nouvelle colonne à l'écriture des données.
Le Trigger utilisé:
1 2 3 4 5 6 7 8 9 10
| DELIMITER //
DROP TRIGGER IF EXISTS `Test_insert_trigger`//
CREATE TRIGGER `Test_insert_trigger`
BEFORE INSERT ON `Meteo`
FOR EACH ROW
BEGIN
IF NEW.datetime2 = '0000-00-00 00:00:00' THEN
SET NEW.datetime2 = NOW();
END IF;
END;// |
=> 2 problèmes:
Le format de date n'est pas bon mais surtout, le plus important est qu'il note la date/heure du moment où la ligne s'écrit.
Dans mon cas ce n'est pas bon car il m'arrive d'injecter des données en retard. Elles ne seront donc pas horodatées correctement.
L'idéal est donc que je parte des deux premières colonnes (date et time) pour en faire une seule.
J'ai fait cela:
SELECT CONCAT(YEAR(date),MONTH(date),DAY(date),HOUR(time),MINUTE(time),SECOND(time)) FROM Meteo
Avec pour but de l’insérer dans le trigger.
Le problème est que cela fonctionne bien sur une ligne existante mais comment le faire sur une ligne en cours d'écriture ?
L'idéal serait que le trigger, à l'écriture de la ligne, récupère la date et l'heure des deux premières colonnes pour ensuite venir l'ajouter en fin de ligne à la dernière colonne sous un format YYYYDDMMhhmmss.
Quel serait la solution à cette problématique ?
Merci beaucoup...
Partager