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 MySQL Discussion :

Améliorer mon comptage de jours avant l'anniversaire des gens


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut Améliorer mon comptage de jours avant l'anniversaire des gens
    bonjour,

    j'ai réussi à faire en une seule une requête, le comptage du NB de jours avant l'anniversaire des gens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    CURDATE() AS aujourdhui,
    ABS(IF(RIGHT(curdate(),5) >= RIGHT(champ_date_naissance,5),
    datediff(CURDATE(),concat(year(CURDATE()+ interval 1 year),RIGHT(champ_date_naissance,6))) ,datediff(CONCAT(year(CURDATE()),right(champ_date_naissance,6)),CURDATE()))) AS quand,
    champ_date_naissance AS date_anniversaire
     
    FROM matable
    elle marche bien mais ya 2 points que j'aimerai améliorer (sans avoir recours à une VIEW de second traitement) .

    1. quand l'anniversaire est aujourd'hui, ça affiche 366 au lieu de 0
    2. Ma première colonne affiche la date du jour, j'aimerais ajouter une autre colonne avec la date du jour + le NB de jour calculé afin d'avoir la date d'anniversaire (et non pas l'année de naissance que j'affiche).

    Avez-vous une idée pour résoudre 1 ou 2 points ?

    bonne journée.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Votre requête donnera des résultats faux notamment aux approches du changement d'année.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste-programmeur
    Inscrit en
    Décembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 52
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    bonjour,

    j'ai réussi à faire en une seule une requête, le comptage du NB de jours avant l'anniversaire des gens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    CURDATE() AS aujourdhui,
    ABS(IF(RIGHT(curdate(),5) >= RIGHT(champ_date_naissance,5),
    datediff(CURDATE(),concat(year(CURDATE()+ interval 1 year),RIGHT(champ_date_naissance,6))) ,datediff(CONCAT(year(CURDATE()),right(champ_date_naissance,6)),CURDATE()))) AS quand,
    champ_date_naissance AS date_anniversaire
     
    FROM matable
    elle marche bien mais ya 2 points que j'aimerai améliorer (sans avoir recours à une VIEW de second traitement) .

    1. quand l'anniversaire est aujourd'hui, ça affiche 366 au lieu de 0
    2. Ma première colonne affiche la date du jour, j'aimerais ajouter une autre colonne avec la date du jour + le NB de jour calculé afin d'avoir la date d'anniversaire (et non pas l'année de naissance que j'affiche).

    Avez-vous une idée pour résoudre 1 ou 2 points ?

    bonne journée.
    La réponse se trouve facilement en utilisant la fonction TO_DAYS();

  4. #4
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut
    mais TO_DAYS() est basé sur l'année 0, j'ai lu la doc on ne peut pas lui dire de se basé sur l'année en cours.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select concat(extract(year from now()), substr(dte, 05, 06))
         , case when now() < concat(extract(year from now()), substr(dte, 05, 06))
                then datediff(concat(extract(year from now()), substr(dte, 05, 06)), now())
                else datediff(date_add(concat(extract(year from now()), substr(dte, 05, 06)), interval 1 year), now())
           end
    Avec DTE = date d'anniversaire

Discussions similaires

  1. [Calendrier] Anniversaire rappelé quelques jours avant
    Par Rian83 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 14
    Dernier message: 28/06/2009, 18h13
  2. [MySQL] envoi d'un mail 2 jours avant un jour "J"!
    Par chouchouboy dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/06/2006, 11h16
  3. [Sécurité] Comment amélioré mon code ?
    Par Nadd dans le forum Langage
    Réponses: 14
    Dernier message: 03/03/2006, 20h13
  4. [Date] Obtenir automatiquement jour avant et après
    Par Didier69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 18/01/2006, 09h42
  5. [Date] Récuperer la date de 7 jours avant
    Par smy85 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 11/05/2004, 12h05

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