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

Langage SQL Discussion :

[PostGreSQL] Dans combien de temps se passe un évènement ?


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut [PostGreSQL] Dans combien de temps se passe un évènement ?
    Bonjour à tous.

    Voilà je suis sur une base de connée PostGreSQL et j'utilise SQL3.

    Mon problème est que j'ai une date d'anniversaire d'une personne au format 'YYYY/MM/DD' et j'aimerais savoir dans combien de temps son anniversaire va arriver.

    La réponse doit être au format 'MM "mois" DD "jours"' mais je n'y arrive pas :'(

    Si vous pouvez m'aider

    Merci d'avance.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Il te suffit de faire la différence entre ta date d'anniversaire et la date système, puis de formatter le résultat.

    Je ne connais pas les fonctions PostGre, jete un oeil ici pour voir si tu y trouves ton bonheur : http://sql.developpez.com/sqlaz/fonctions/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Le problème de la date d'anniversaire c'est l'année qui n'est pas l'année en cours mais son année de naissance.

    Il faudrait que j'arrive pour celà juste dans le SELECT à modifier l'année de naissance par l'année en cours où l'année suivante. (Pas très clair mon explication).

    J'ai essayé ça mais ça ne fonctionne pas comme je le voudrait :

    SELECT nom_client,
    date_trunc('year', age(date_naissance_client) + interval '1 year') - age(date_naissance_client) AS "Anniversaire dans ?",
    date_trunc('year', age(date_naissance_client)) + interval '1 year' AS Age
    FROM client;

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Où est la date système dans ta requête ? Ca doit être CURRENT_DATE, non ? Est-elle dans la fonction age ? je ne sais pas ce que fais cette fonction

    Que te renvoie ta requête et qu'est-ce qui ne te convient pas ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Voyez le puzzle SQL que j'ai donné ici :
    http://sqlpro.developpez.com/SQL_AZ_P.html
    Problème n° 5 - dates d'anniversaire

    A +

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    La date système sur PostGre c'est current_date ou la fonction now().

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Problème n° 5 : date d'annie versaire - SOLUTION :

    Connaissez vous la fonction EXTRACT ???
    Non, sinon elle vous aurait grandement facilité la vie. Sans cela il vous est possible d'utiliser le transtypage à l'aide de la fonction CAST en transformant la date en chaîne de caractères string puis en entier pour effectuer les mêmes calculs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT NO_CLI 
    FROM Client 
    WHERE 
       (( 36 <= 
          (EXTRACT(MONTH FROM DATE_NAISSANCE_CLI)-1)*31 
          +EXTRACT(DAY FROM DATE_NAISSANCE_CLI)) 
       AND 
          ((EXTRACT(MONTH FROM DATE_NAISSANCE_CLI)-1)*31 
          +EXTRACT(DAY FROM DATE_NAISSANCE_CLI) 
       <= 84 ))
    Mais d'ou viennent les chiffres 35 et 84 me direz vous ?
    Simple : 5 février => (2-1)*31 + 5 = 36 et 22 mars => (3-1)*31+22 = 84

    Bien entendu vous pouvez rendre la requête SQL ci dessus parfaitement paramétrable.
    Partons d’une date d et d’un intervalle i. Recherchons tous les clients dont les anniversaires vont être compris entre la date d et la date d + i (ou i est un nombre de jours). Calculons MinDay et MaxDay de la façon suivante
    MinDay = (mois(d)-1)*31+jour(d)
    MaxDay = MinDay + i + 1
    Alors la requête s'écrit dorénavant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT NO_CLI 
    FROM Client 
    WHERE 
     (( :minDay < 
     (EXTRACT(MONTH FROM DATE_NAISSANCE_CLI)-1)*31 
     +EXTRACT(DAY FROM DATE_NAISSANCE_CLI)) 
     AND 
     ((EXTRACT(MONTH FROM DATE_NAISSANCE_CLI)-1)*31 
     +EXTRACT(DAY FROM DATE_NAISSANCE_CLI) 
     <= :MaxDay ))
    De plus, si vous disposez d'un operateur comme CURRENT_DATE, avec un peu d'astuce, vous pouvez trouver une requête vous permettant de trouver tous les clients dont la date anniversaire sera dans les 15 jours qui viennent... mais attention au effets de bord dans ce dernier cas !

    A +

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Merci pour cette réponse mais ça ne me donne as exactement ce que je recherche. Parceque avec cette méthode j'obtiens le nombre de jours. Seulement dans mon affichage j'aimerais si possible avoir pas que le nombre de jours. Par exemple au lieu de "35 jours" avoir "1 mois et 4 jours".

    Il y aurait la façon feignasse en mettant que des CASE mais je suis sûr que l'on peut y arriver plus facilement.

    Merci de votre aide SQLpro.

    Je vais tester vos puzzle ;-)

Discussions similaires

  1. [PC Serveur] Serveur acheté aujourd'hui, Obsolète dans combien de temps ?
    Par llaffont dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 06/06/2011, 15h15
  2. Combien de temps pour être dans le bain d'un nouveau post ?
    Par Golgotha dans le forum La taverne du Club : Humour et divers
    Réponses: 31
    Dernier message: 06/07/2009, 13h10
  3. combien de temps met la boucle de rendu?
    Par Mastero dans le forum DirectX
    Réponses: 4
    Dernier message: 11/05/2005, 18h22
  4. [8.0] Intégration de PostGreSQL dans une appli windows
    Par Didier69 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 27/01/2005, 16h26
  5. Connexion à postgresql dans un sous reseau window
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 21/07/2003, 14h19

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