Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/11/2007, 10h43   #1
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
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 :
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
Nious99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 12h21   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 :
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 12h46   #3
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
J'ai essayé avec DATE_FORMAT mais là ça me met un null dans le champ
Nious99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 13h33   #4
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 14h39   #5
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
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.
Nious99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 15h34   #6
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 15h57   #7
Membre du Club
 
Inscription : juin 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2005
Messages : 60
Points : 40
Points : 40
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 :
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.
Nious99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h13.


 
 
 
 
Partenaires

Hébergement Web