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 :

[MySQL 5] Trigger formatant la date


Sujet :

SQL Procédural MySQL

  1. #21
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    En modifiant le my.ini et supprimant le "default 0" j'ai le même truc bizarre qu'avec datetime : je n'ai aucune des deux colonnes de fin.
    Christophe

    Pensez à mettre quand c'est le cas.

  2. #22
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    1) j'ai testé avec des DATETIME, je n'ai aucun problème. Je pense que soit tes valeurs Access ne correspondent pas exactement à ton format, soit il y a un problème dans tes tests. Tu es sûr de ne pas avoir de secondes ?

    Voici mon test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    create table employe(
    	EMPLOYE_DEBUT DATETIME,
    	EMPLOYE_FIN DATETIME,
    	TXT_EMP_DEBUT varchar(20),
    	TXT_EMP_FIN varchar(20)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    CREATE TRIGGER oreDateIns BEFORE INSERT ON employe
    FOR EACH ROW SET 
    NEW.employe_debut = STR_TO_DATE(NEW.txt_emp_debut, '%d/%m/%Y %H:%i'),
    NEW.employe_fin = STR_TO_DATE(NEW.txt_emp_fin, '%d/%m/%Y %H:%i');
     
    INSERT INTO employe(txt_emp_debut, txt_emp_fin) VALUES ('01/07/2015 11:22', '07/01/2016 22:11') ;
     
    SELECT * FROM employe ;
    +---------------------+---------------------+------------------+------------------+
    | EMPLOYE_DEBUT | EMPLOYE_FIN | TXT_EMP_DEBUT | TXT_EMP_FIN |
    +---------------------+---------------------+------------------+------------------+
    | 2015-07-01 11:22:00 | 2016-01-07 22:11:00 | 01/07/2015 11:22 | 07/01/2016 22:11 |
    +---------------------+---------------------+------------------+------------------+
    1 row in set (0.00 sec)
    2) après avoir modifié le my.ini, il faut redémarrer MySQL.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #23
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    1) Il n'y a pas de secondes, du moins dans les 100 premières lignes ; je n'ai pas regardé toutes les lignes.
    2) J'ai bien redémarré le serveur.

    Je vais proposer une solution par FTP + shell faisant l'import. Cela me parait plus simple.
    Christophe

    Pensez à mettre quand c'est le cas.

  4. #24
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Si tu refais mon test, ça donne quoi ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #25
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Antoun, je ne pense pas pouvoir faire ton test aujourd'hui. Avec les Insert directs je ne me rappelle pas avoir eu de problème.
    Christophe

    Pensez à mettre quand c'est le cas.

  6. #26
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par Christophe P. Voir le message
    Antoun, je ne pense pas pouvoir faire ton test aujourd'hui. Avec les Insert directs je ne me rappelle pas avoir eu de problème.
    Tu fais quoi, si ce n'est pas des "Insert directs" ?

    Si c'est du LOAD DATA INFILE, je crois me rappeler qu'il zappe les triggers.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #27
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Je passe par Access pour les imports !

    Mais maintenant (après la réunion de cet après-midi) nous sommes d'accord pour abandonner cette solution et utiliser le FTP pour envoyer les fichiers qui seront chargés par "LOAD DATA INFILE".
    Et là ça va beaucoup mieux.
    Christophe

    Pensez à mettre quand c'est le cas.

  8. #28
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Christophe.

    En modifiant le my.ini et supprimant le "default 0" j'ai le même truc bizarre qu'avec datetime : je n'ai aucune des deux colonnes de fin.
    J'ai pas bien compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [wampmysqld]
    explicit_defaults_for_timestamp = on
    La directive à mettre dans le fichier "my.ini" doit se placer dans la section "wampmysqld" qui est le nom du service mysql.

    De plus, cette directive ne fonctionne que pour le type "timestamp" et non le type "datetime".
    Si tu veux conserver la totalité du timestamp, à l'identique de ce qui existe sous DB2, tu dois mettre "timestamp(6)" pour avoir les millionièmes de secondes.

    Il faut savoir, à l'inverse de DB2, que Mysql met la même valeur du timestamp, même si le chargement dure plusieurs minutes.

    Et comme l'indique Antoun, ne pas oublier de "redémarrer les services", en cliquant sur cette option dans l'icône wampserver.

    Mais maintenant (après la réunion de cet après-midi) nous sommes d'accord pour abandonner cette solution et utiliser le FTP pour envoyer les fichiers qui seront chargés par "LOAD DATA INFILE".
    Comment vas-tu résoudre ton problème de format de la date ?
    Soit tu utilises ma fonction que tu peux introduire dans le 'LOAD DATA INFILE'.
    Soit tu fais en sorte de ne pas avoir de date sous le mauvais format avant de charger ton fichier dans ta table mysql.

    Si tu as un problème pour construire ton "LOAD DATA INFILE", il te suffit de nous indiquer ce que tu ne sais pas faire.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #29
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Je vais spécifier le format de date dans le LOAD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD DATA INFILE 'emp.csv' INTO TABLE employeFIELDS TERMINATED BY ';' IGNORE 1 LINES
    (Employe_CodeEmploye, Employe_Nom, Employe_Prenom, Employe_Statut, @Employe_Debut, @Employe_Fin)
    SET Employe_Debut = str_to_date(@Employe_Debut, '%d/%m/%Y %H:%i'),
    Employe_Fin = str_to_date(@Employe_Fin, '%d/%m/%Y %H:%i');
    Christophe

    Pensez à mettre quand c'est le cas.

  10. #30
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Christophe.

    Voici un exemple de chargement d'une table à partir d'un fichier de type "text".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    LOAD DATA LOCAL INFILE 'Charge.txt'
    	INTO TABLE `Cities`
        CHARACTER SET latin1
    	FIELDS	TERMINATED BY ','
    			ENCLOSED   BY '"'
    			ESCAPED    BY '\\'
    	LINES	TERMINATED BY '\n'
        IGNORE 0 LINES
        (@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
    	set Country    = trim(@F1),
    	    City       = trim(@F2), 
    	    AccentCity = trim(@F3),
    	    Region     = trim(@F4),
    		Date       = outils.chgdate(@F8);
    C'est dans cet exemple que j'ai fait mon test de la fonction chgdate.

    Attention à la syntaxe de ta ligne dans le fichier à charger.
    Ici dans cet exemple, j'ai :
    --> chaque champs est encadré par des guillemettes (").
    Ce n'est pas obligatoire pour les champs numériques.
    --> chaque champs se termine par une virgule (,) même sur le dernier champs de la ligne.
    --> la ligne se termine par un '\n'. Il faut voir cela avec le format du fichier qui est du type windows.

    Est-ce que tu as bien vérifié que tous les champs ont été chargés dans les bonnes colonnes ?
    Si tu as un problème avec les espaces, utiliser la fonction "trim()" pour les supprimer.

    Pour visualiser tes colonnes, tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select	concat('>', Country,   '<') as 'Country',
    		concat('>', City,      '<') as 'City',
    ...
    ainsi tu verras tout de suite si un blanc n'est pas venu s'insérer en début ou en fin de ta colonne de type 'text'.

    Sinon, je ne voie rien de particulier dans ton exemple.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Choix du format de date timestamp Mysql ou timestamp Unix
    Par audreyc dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/04/2009, 07h20
  2. Changer format de date - Mysql ignore le caractere \
    Par Peter K. dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/01/2008, 21h35
  3. Modification de format de date dans un trigger
    Par Nious99 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 14/11/2007, 15h57
  4. [Dates] Format de date MySQL vers français
    Par tcompagnon dans le forum Langage
    Réponses: 4
    Dernier message: 17/07/2007, 13h02
  5. Format français date=>date MySQL
    Par john.dbc dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/08/2006, 13h28

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