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

MS SQL Server Discussion :

Aide pour une Procedure Stoquée


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut Aide pour une Procedure Stoquée
    Salut tout le monde.
    il est presque 4H du mat et je bloque toujours sur ma procedure stoquée,
    Dans ma base de donnée je stoque soit l'age directement soit la date de naissance (si l'un deux est nul dont l'autre est utilisé) je veux recuperer le nom du client + son age qui peut etre calculé a partir de la date de naissance si age est null. J'ai resolu mon probleme en ecrivant un code C# qui permet de modifier un dataset qui contient deja le nom du client

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // res est mon data set qui contient nom age et birthday
     
    DataColumn dc = new DataColumn("FinalAge", System.Type.GetType("System.Int32"));
     
    //j'aoute ma nouvelle colonne FinalAge
     
    res.Tables[0].Columns.Add(dc);
     
    //et je calcule sa valeur
    foreach (DataRow row in res.Tables[0].Rows)
    {
      if (row["Age"].ToString()==string.Empty)
        {
            DateTime birth = Convert.ToDateTime(row["Birthday"]);
            int years = DateTime.Now.Year - birth.Year;
            if (DateTime.Now.Month < birth.Month || (DateTime.Now.Month == birth.Month && DateTime.Now.Day < birth.Day))
                years--;
     
            row["FinalAge"] = years;
         }
      else row["FinalAge"] = row["Age"];
     
    }
    et la je veux transformer ce code en une procedure stoquée ou meme une requete si c'est faisable biensure .

    Merci d'avance
    Mehdi Feki : Modérateur .Net

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT year ( DATEADD( day, 
      DATEDIFF ( day , birthday , current_timestamp ) , '19000101' ) ) - 1900 
      as Age
    Probablement pas 100% sûr dans les jours qui entourent l'anniversaire, mais globalement ça le fait.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Merci rudib pour la reponse masi apparament vous n'avez pas compris mon probleme

    J'essai de re expliquer :

    Ma table contient 3 colonnes , nom, Age, DateNaissance

    Age et DateNaissance sont exclusives cad, Si Age est NULL alors Date Naissance est defini et vice versa. Donc Dans ma requete Si Age est definie je retourne sa valeur sinon je calcule l'age a partir de DataNaissance

    En plus je dois retourner d'autre champs comme par exemple le nom.

    J'espere que c'est plus clair
    Merci
    Mehdi Feki : Modérateur .Net

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    C'est bon fallait utiliser la fonction ISNULL

    ISNULL(param1,param2) retourne param2 si param1 est null sinon elle retourne param1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [Name],ISNULL([Age],DateDIFF(yy,[Birthday],getdate())-
    CASE WHEN getdate()>=DateAdd(yy,DateDIFF(yy,[Birthday],getdate()),
    [Birthday]) THEN 0 ELSE 1 END) AS Age FROM [TblCustomer]
    Mehdi Feki : Modérateur .Net

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

Discussions similaires

  1. Pb de Commit dans une Procedure stoquée
    Par avenirdev dans le forum InterBase
    Réponses: 2
    Dernier message: 01/10/2004, 09h49
  2. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03
  3. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  4. Aide pour une requete ... "COUNT(*)"
    Par mechantebestiole dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/05/2004, 16h27
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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