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

Développement SQL Server Discussion :

Problème d'Heures (Matin, Après midi) !


Sujet :

Développement SQL Server

  1. #1
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut Problème d'Heures (Matin, Après midi) !
    Bonjour,

    Toujours avec ma base Access cliente d'un serveur SQL Server 2000.

    Je dois rechercher sur les 13 derniers mois des informations concernant les matins et les après midi.
    Il faut compter le nombre de fois ou des personnes ont badgé entre minuit et midi (00:00 et 11:59) et le nombre de fois pour le reste de la journée (12:00 et 23:59).

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    SELECT 
                  cnt1.NomMois +' '+ CAST(cnt1.Année AS NVARCHAR) AS [Date]                                                                                           
               ,  COUNT(Compte) AS [Nombre]                             
    FROM                                                                                                                                                               
    (
    SELECT 
     
           CASE Month([TVAL_DT_VALIDATION])                                                                                                                   
               WHEN  1 THEN 'Janvier'
               WHEN  2 THEN 'Février'
               WHEN  3 THEN 'Mars'
               WHEN  4 THEN 'Avril'
               WHEN  5 THEN 'Mai'
               WHEN  6 THEN 'Juin'
               WHEN  7 THEN 'Juillet'
               WHEN  8 THEN 'Août'
               WHEN  9 THEN 'Septembre'
               WHEN  10 THEN 'Octobre'
               WHEN  11 THEN 'Novembre'
               WHEN  12 THEN 'Décembre'
     
           END AS NomMois
         , Year([ChampsDate]) AS Année
         , M.Champs AS Compte
     
    FROM 
           MaTable M
     
    WHERE
           M.ChampsDate >= '01/09/2007'        
       AND M.ChampsDate < '01/10/2008'
       AND CAST(FLOOR(CAST(DATEPART(hh, ChampsDate) AS FLOAT)) AS DATETIME) < '12:00'
    ) cnt1
     
    GROUP BY
                 cnt1.NomMois +' '+ CAST(cnt1.Année AS NVARCHAR)
     ;
    Pour le matin, cela ne me renvois pas les bons résultats. Lorsque je mets "> '11:59' " cela semble juste.

    Merci d'avance !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    j'ai passé quelques temps sur votre exemple mais votre code me parait faux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SET STATISTICS TIME ON
     
    DECLARE @ladate DATETIME
     
    SELECT @ladate = CONVERT(datetime, '16/03/2006 13:01')
     
    SELECT @ladate,
     
    CAST(FLOOR(CAST(DATEPART(hh, @ladate) AS FLOAT)) AS DATETIME) AS Chtulus,
    CAST(CAST(@ladate as binary(4)) as datetime) AS ChristianRobert
    Tester cette exemple pour comprendre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    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 774
    Points : 52 743
    Points
    52 743
    Billets dans le blog
    5
    Par défaut
    Le mplus simple est de convertir la date en float et de divisier par 0.5 cela donnera des demi journées. Vous n'avez plus qu'a recomposer !

    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/ * * * * *

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour @ylarvor et @SQLpro,

    @ylarvor : Après moult vérification, votre solution est correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE
           M.ChampsDate >= '01/09/2007'        
       AND M.ChampsDate < '01/10/2008'
       AND CAST(CAST(ChampsDate) AS BINARY (4)) AS DATETIME) < '12:00'
    ) cnt1
    Pour les matinées ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE
           M.ChampsDate >= '01/09/2007'        
       AND M.ChampsDate < '01/10/2008'
       AND CAST(CAST(ChampsDate) AS BINARY (4)) AS DATETIME) > '11:59'
    ) cnt1
    Pour les Après midi.

    Merci beaucoup,
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



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

Discussions similaires

  1. Présence matin et après-midi
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 06/06/2008, 14h26
  2. [VB]Problème d'heure de travail
    Par AlfiQue dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 18/02/2006, 18h57
  3. Problème lecture du son après affichage du panel
    Par legillou dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 10/01/2006, 13h19
  4. Réponses: 4
    Dernier message: 07/07/2005, 17h18
  5. [JComboBox] Problème dans le PopMenu après ajout
    Par bidon dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 29/03/2005, 15h52

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