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 :

Manipulations sur une date


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 113
    Points : 48
    Points
    48
    Par défaut Manipulations sur une date
    Bonjour je suis en train de travailler sur une application de paie et je voudrais recouper le mois à partir d'une date mais le problème c'est que lorsque le mois est impair il ne m'affiche pas le 0 avant le numéro du mois il m'affiche juste 2 au lieu de 02 voilà ma chaine de conx merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TxtSQLGlobal = "SELECT YEAR(P.datedebut) as Annee,(case when len(Month(P.datedebut))=0 then '0'+ Month(P.datedebut) else Month(P.datedebut) end) as Mois,P.datedebut,P.IdPeriode,  " _
                   & " sum(Round((case when (S.CumulAssiette) is null then 0 else S.CumulAssiette end),2)) as CumulAssiette," _
                   & " sum(Round((case when (S.CumulBaseCalcule) is null then 0 else S.CumulBaseCalcule end),2)) as CumulBaseCalcule" _
                   & " FROM AgentsCaisses as AC INNER JOIN ((Agents as A INNER JOIN (SituationProgressifAgentCaisses as S Inner join PeriodesPaie as P on P.IdPeriode=S.IdPeriodeReference)ON A.IdAgent = S.IdAgent) LEFT JOIN Villes ON A.IdVille = Villes.IdVille) ON (AC.IdCaisse = S.IdCaisse) AND (AC.IdAgent = S.IdAgent)" _
                   & " Where (((CiopAvecCaisse = 1 Or ContratCiop = 0) And ((S.IdCaisse) = 'CNSS') And ((S.IdPeriodeReference) = '" & TablePeriodeDefaut.Fields("IdPeriode") & "')))" _
                   & " Group BY P.datedebut,P.IdPeriode"

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Quel SGBD utilises-tu ?

    Tu devrais remplacer len(Month(P.datedebut))=0 par len(Month(P.datedebut)) < 2 pour obtenir le résultat que tu attends.
    Toutefois, il existe certainement des fonctions de formatage des nombres en chaine de caractère propres à ton SGBD.

    Pour optimiser ta requête, tu peux remplacer CASE WHEN colonne IS NULL THEN 0 ELSE colonne END par COALESCE(colonne, 0).

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    J'utilise SQL server 2005. Mon problème, ce n'est pas au niveau de la longueur non mais au niveau de la composition du numéro de mois : je veux afficher le zéro avant les numéros des mois impairs. C'est pour cela que j'ai fait ce contrôle sur le nombre de caractères du mois ; si la longueur est inférieure à 2, je vais ajouter le zéro.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Qu'appelles-tu un numéro impair ?
    Pour la plupart des gens, un nombre est dit impair s'il n'est pas un multiple de deux. Ça ne semble pas être la manière dont tu le conçois...
    lorsque le mois est impair il ne m'affiche pas le 0 avant le numéro du mois il m'affiche juste 2 au lieu de 02
    Ta requête ne fais pas ce que tu décris :
    si la longueur est inférieure à 2, je vais ajouter le zéro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case when len(Month(P.datedebut))=0 then '0'+ Month(P.datedebut) else Month(P.datedebut) end

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Le test de la longueur n'est pas nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select right(cast(100 + month(getdate()) as char(3)), 2)    as c1
         , right('0' + cast(month(getdate()) as varchar(2)), 2) as c2;
     
    c1   c2
    ---- ----
    07   07

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    Ce que je veux dire avec le nombre impair, c'est le nombre des chiffres qui composent le numéro du mois. Par exemple, le mois 2 se compose d'un seul chiffre, par contre le mois 12 il se compose de deux chiffres le 1 et le 2. Moi, je veux ajouter un zéro au début de chaque mois impair de 1 à 9.
    Merci pour vos réponses mais je ne comprends pas bien la formule que vous avez écrit.
    Merci encore

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 113
    Points : 48
    Points
    48
    Par défaut
    @Waldar Vous arrivez à comprendre mon problème merci ça marche très bien encore

    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TxtSQLGlobal = "SELECT YEAR(P.datedebut) as Annee, RIGHT('0' + cast(month(P.datedebut)AS varchar(2)), 2) as Mois,P.datedebut,P.IdPeriode,  " _
                   & " sum(Round((case when (S.CumulAssiette) is null then 0 else S.CumulAssiette end),2)) as CumulAssiette," _
                   & " sum(Round((case when (S.CumulBaseCalcule) is null then 0 else S.CumulBaseCalcule end),2)) as CumulBaseCalcule" _
                   & " FROM AgentsCaisses as AC INNER JOIN ((Agents as A INNER JOIN (DerniereSituationAgentCaissesTemporaire as S Inner join PeriodesPaie as P on P.IdPeriode=S.IdPeriodeReference)ON A.IdAgent = S.IdAgent) LEFT JOIN Villes ON A.IdVille = Villes.IdVille) ON (AC.IdCaisse = S.IdCaisse) AND (AC.IdAgent = S.IdAgent)" _
                   & " Where (((CiopAvecCaisse = 1 Or ContratCiop = 0) And ((S.IdCaisse) = 'CNSS') And ((S.IdPeriodeReference) = '" & TablePeriodeDefaut.Fields("IdPeriode") & "')))" _
                   & " Group BY P.datedebut,P.IdPeriode"
    très bonne journée à tous

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

Discussions similaires

  1. question sur manipulation d'une date
    Par decisionnel dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 12/07/2009, 23h26
  2. requette sur une date
    Par AlphonseBrown dans le forum Langage SQL
    Réponses: 13
    Dernier message: 04/04/2005, 13h41
  3. Travailler sur une date
    Par HqX dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/10/2004, 16h54
  4. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 23h37
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 15h25

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