IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Trigger pour fusionner et écrire 2 colonnes de la ligne en cours


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Par défaut Trigger pour fusionner et écrire 2 colonnes de la ligne en cours
    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)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    Pourquoi avoir décomposé l'heure et la date en deux colonnes ? Une seule colonne de type DATETIME suffit amplement pour stoker la date et l'heure.

    Ensuite pour formater la date il existe deux fonctions, DATE_FORMAT() et STR_TO_DATE permettent de changer le format d'une date dans le format voulu.

    DATE_FORMAT convertit une donnée au format date de MySQL dans le format voulu.

    STR_TO_DATE convertie une chaîne de caractère dans le format précisé au format DATE de MySQL.

    lien vers la doc. Avec ces deux fonctions votre problème aurait été résolu en moins de deux !!!

Discussions similaires

  1. Requête SQL pour fusionner des colonnes
    Par Aenur56 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/05/2010, 19h23
  2. Réponses: 3
    Dernier message: 03/05/2010, 12h40
  3. Requête pour fusionner deux colonnes
    Par david71 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/12/2007, 20h44
  4. Trigger pour faire une table "mirroir"
    Par lgomez dans le forum Oracle
    Réponses: 8
    Dernier message: 26/10/2005, 13h12
  5. Réponses: 9
    Dernier message: 05/04/2005, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo