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 :

Modification de format de date dans un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut Modification de format de date dans un trigger
    Bonjour, je cherche à faire un INSERT INTO à partir de date au mauvais format. Par exemple 09/18/2007 00:00:00, ce qui ne passe pas sur MySQL. J'ai donc fait un trigger qui convertit cette chaîne dans le bon format. Ca marche quand mon champ de destination est au format texte, mais pas quand il est au format datetime.
    Voici mon trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter //
    CREATE TRIGGER gruik BEFORE INSERT ON test
    FOR EACH ROW 
    BEGIN 
    	IF CHAR_LENGTH(NEW.Valeur) > 0 THEN
    		SET NEW.Valeur=CONCAT(SUBSTRING(NEW.Valeur,7,4),"-",SUBSTRING(NEW.Valeur,1,2),"-",SUBSTRING(NEW.Valeur,4,2)," ",SUBSTRING(NEW.Valeur,12,8));
    	ELSE
    		SET NEW.Valeur=NEW.Valeur;
    	END IF;
    END //
    delimiter ;
    Un fois que l'insert est fini, il y a 0000-00-00 00:00:00 dans le champ.
    Merci de votre aide, je sèche

  2. #2
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par Nious99 Voir le message
    Bonjour, je cherche à faire un INSERT INTO à partir de date au mauvais format. Par exemple 09/18/2007 00:00:00, ce qui ne passe pas sur MySQL. J'ai donc fait un trigger qui convertit cette chaîne dans le bon format. Ca marche quand mon champ de destination est au format texte, mais pas quand il est au format datetime.
    Voici mon trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter //
    CREATE TRIGGER gruik BEFORE INSERT ON test
    FOR EACH ROW 
    BEGIN 
    	IF CHAR_LENGTH(NEW.Valeur) > 0 THEN
    		SET NEW.Valeur=CONCAT(SUBSTRING(NEW.Valeur,7,4),"-",SUBSTRING(NEW.Valeur,1,2),"-",SUBSTRING(NEW.Valeur,4,2)," ",SUBSTRING(NEW.Valeur,12,8));
    	ELSE
    		SET NEW.Valeur=NEW.Valeur;
    	END IF;
    END //
    delimiter ;
    Un fois que l'insert est fini, il y a 0000-00-00 00:00:00 dans le champ.
    Merci de votre aide, je sèche
    Il faut que tu utilises les fonctions de date de mysql pour le reformater et qu'il le comprenne correctement.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    J'ai essayé avec DATE_FORMAT mais là ça me met un null dans le champ

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par Nious99 Voir le message
    J'ai essayé avec DATE_FORMAT mais là ça me met un null dans le champ
    C'est qu'il y a un problème de format en entré.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    Oui, le format en entrée n'est pas bon, c'est pour ça que j'essaye de le convertir, mais j'ai l'impression que le problème vient du fait que je traite les données comme du texte.

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Alors tente avec le CAST
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    J'ai essayé avec CAST, ça marche toujours pas, ça me met NULL comme valeur, sauf quand je passe le champ en text.

    Mon code est maintenant comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    delimiter //
    CREATE TRIGGER gruik BEFORE INSERT ON test
    FOR EACH ROW 
    BEGIN 
    	IF CHAR_LENGTH(NEW.Valeur) > 0 THEN
    		SET NEW.Valeur=CAST(CONCAT(SUBSTRING(NEW.Valeur,7,4),"-",SUBSTRING(NEW.Valeur,1,2),"-",SUBSTRING(NEW.Valeur,4,2)," ",SUBSTRING(NEW.Valeur,12,8)) AS DATETIME);
    	ELSE
    		SET NEW.Valeur=NEW.Valeur;
    	END IF;
    END //
    delimiter ;
    Il y a un truc amusant, c'est que quand je le rentre dans un champ text, il me met la bonne valeur, à savoir : 2007-09-18 00:00:00, et que quand je change le type de champ en DATETIME, il met les nouveaux enregistrements en NULL, par contre, ceux qui avaient bien été pris en compte par MySQL quand c'était en texte sont gardés au bon format, reconnus comme une date.

Discussions similaires

  1. format de date dans SQL/serv 2000
    Par philo71 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/10/2005, 15h52
  2. comment imposer un format de date dans DB2?
    Par Mittou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/10/2005, 08h16
  3. [SQL 9i ] format de date dans un where
    Par booth dans le forum Oracle
    Réponses: 5
    Dernier message: 14/10/2005, 10h23
  4. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12
  5. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49

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