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

Requêtes et SQL. Discussion :

Problème de conversion d'une chaine de texte en format date. [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Points : 34
    Points
    34
    Par défaut Problème de conversion d'une chaine de texte en format date.
    Bonjour à tous, et meilleurs voeux pour cette nouvelle année. Qu'elle vous soit riche en développements productifs

    En tant que débutant, je viens vers vous car j'ai un problème de conversion de chaîne texte en format date. Ca fait 3 jours que je m'arrache les cheveux, et je préfère vous soumettre mon problème tant qu'il m'en reste.

    J'ai une table de données de population (comportant environ 260 000 enregistrements) avec une date de naissance pour chaque individu, éclatée dans 3 champs distincts : JR pour jour, MS pour mois, et AN pour année de naissance.

    Dans le champ NAIS (en type calculé), j'ai concaténé les 3 champs précédents à l'aide de l'expression : [Q2JR] & [Q2MS] & [Q2AN], et j'obtiens donc des dates de naissance de la forme jjmmaaaa. Mais je ne crois pas que l'on puisse effectuer des calculs de date sur un champ de ce type.

    Donc, dans le champ NAISS (de type texte), j'ai recopié les données du champ NAIS à l'aide d'une requête action (UPDATE...), mais j'aimerais en modifier le format afin de pouvoir faire des calculs, du genre : nombre d'individus de moins de 14 ans, ou population née avant 1990, etc...

    J'ai parcouru le forum en long et en large, et je ne suis pas parvenu à adapter les solutions que j'y ai trouvées, comme les fonctions CDate et Format.

    J'ai créé un champ (Champ57) de type Date, mais j'obtiens un message d'erreur d'incompatibilité de type.

    Je ne sais plus quoi faire , please help me.

    Par avance, merci infiniment.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonne année à toi,


    Si tu veux connaître tout (ou presque) sur les dates, vois : http://mhubiche.developpez.com/vba/f...ions/datetime/

    Et pour ton cas précis, la fonction DateSerial() est celle qui s'impose.

  3. #3
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Axe_Débutant bonsoir

    ou créer une fonction prête à l'emploi (alternative à la solution de Claude)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function transforme_date(jour As Byte, mois As Byte, annee As Integer) As Date
        On Error Resume Next
        madate = jour & "/" & mois & "/" & annee
        transforme_date = Format(madate, "yyyy/mm/dd")
    End Function
    si la date n'est pas cohérente elle te renverra 00:00:00

    exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function testdate()
     ' renvoie la date de naissance pour une personne née le 2 octobre 1982
     Dim DateNaissance As Date
     DateNaissance = transforme_date(2, 10, 1982)
     MsgBox DateNaissance
    End Function
    jimbolion

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Points : 34
    Points
    34
    Par défaut
    Bonsoir Claude et Jimbolion,

    Merci pour vos promptes réponses.

    J'ai pu grâce à la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_POP SET T_POP.NAISS = DateSerial([T_POP]![Q2AN],[T_POP]![Q2MS],[T_POP]![Q2JR])
    WHERE ((([T_POP]![Q2NAISS]) Is Not Null));
    Puis, j'ai modifié tout simplement le type de champ (en mode création) de la table en "Date/Heure".

    Mes calculs sur les dates fonctionnent impeccablement maintenant.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 14h50
  2. Problèmes de conversion d'une chaine en double
    Par glycerine dans le forum Débuter
    Réponses: 3
    Dernier message: 31/07/2007, 15h05
  3. [Requête]Convertir une chaine de texte en format date
    Par emjie dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/04/2007, 00h44
  4. Conversion d'une chaine de char en numerique
    Par simone.51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/03/2004, 16h47

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