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 :

Nombre de jour dans un mois


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut Nombre de jour dans un mois
    Bonjour,

    Décidément, j'ai beau chercher sur le net, mais je n'arrive pas à trouver de solution.
    J'aimerais trouver une fonction qui me permette de me dire combien y a-t-il de jour dans un mois donné:
    par exemple, si je lui dis que mon mois c'est alors il dois me renvoyer 30 (car il ya 30 jours en septembre).

    Merci pour votre aide précieuse..

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Ceci te donneras toujours le nombre de jours du mois en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DAY(DATEADD(month, 1, CONVERT(DateTime,CONVERT(varchar(7),GETDATE(),120) + '-01',120))-1)
    Fastoche non ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    J'y serais JAMAIS arrivé !!
    Heureusement qu'il y a des gens comme toi.. t'assures

    Merci

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DAY(DATEADD (m, 1, DATEADD (d, 1 - DAY(GETDATE()), GETDATE())) - 1)
    L'idée est la suivante :

    - Retrancher le nombre de jours actuel pour se retrouver en début de mois.
    - Utiliser la fonction DATEADD pour arriver au début du mois suivant
    - Enlever un jour pour arriver à la fin du mois précédent
    - Extraire le jour

    ++

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    - Retrancher le nombre de jours actuel pour se retrouver en début de mois.
    - Utiliser la fonction DATEADD pour arriver au début du mois suivant
    - Enlever un jour pour arriver à la fin du mois précédent
    - Extraire le jour
    C'est exactement ce que fait la solution que j'ai proposé
    mais ta version est plus lisible (pas de conversion en chaîne)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Tout à fait Népomucène

    Les 2 solutions suivent le même raisonnement et sont aussi valable l'une que l'autre.

    Maintenant il est vrai que lorsque les conversions peuvent être évitées je le fais systématiquement car beaucoup plus performant (bien sûr sur un volume de données conséquent)

    Si je reprends nos 2 requêtes :

    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
    USE tempdb;
    GO
     
    CREATE TABLE temps
    (
     date DATETIME
    );
    GO
     
    INSERT temps VALUES (DATEADD(m, -1 * RAND() * 100, GETDATE()));
    GO 200000
     
    SET STATISTICS TIME ON;
     
    SELECT DAY(DATEADD (m, 1, DATEADD (d, 1 - DAY(date), date)) - 1)
    FROM temps
     
    SELECT DAY(DATEADD(month, 1, CONVERT(DateTime,CONVERT(varchar(7),date,120) + '-01',120))-1)
    FROM temps
     
    -- SQL Server Execution Times:
    --   CPU time = 235 ms,  elapsed time = 851 ms.
     
    -- SQL Server Execution Times:
    --   CPU time = 359 ms,  elapsed time = 982 m
    ++

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    He ben.. vous êtes bien calé... bravo !!

    Mais si je veux utiliser cette "fonction" pour le mois précédent ?

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Mais si je veux utiliser cette "fonction" pour le mois précédent ?
    En reprenant le principe de @mikedavem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DAY(DATEADD (d, -1, DATEADD (d, 1 - DAY(GETDATE()), GETDATE())))
    Pour avoir le nombre de jours du mois du trimestre précédent,
    Il faut verser 5€ à www.developpez.com
    (it's a joke)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Tout à fait Népomucène

    Les 2 solutions suivent le même raisonnement et sont aussi valable l'une que l'autre.

    Maintenant il est vrai que lorsque les conversions peuvent être évitées je le fais systématiquement car beaucoup plus performant (bien sûr sur un volume de données conséquent)

    Si je reprends nos 2 requêtes :

    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
    USE tempdb;
    GO
     
    CREATE TABLE temps
    (
     date DATETIME
    );
    GO
     
    INSERT temps VALUES (DATEADD(m, -1 * RAND() * 100, GETDATE()));
    GO 200000
     
    SET STATISTICS TIME ON;
     
    SELECT DAY(DATEADD (m, 1, DATEADD (d, 1 - DAY(date), date)) - 1)
    FROM temps
     
    SELECT DAY(DATEADD(month, 1, CONVERT(DateTime,CONVERT(varchar(7),date,120) + '-01',120))-1)
    FROM temps
     
    -- SQL Server Execution Times:
    --   CPU time = 235 ms,  elapsed time = 851 ms.
     
    -- SQL Server Execution Times:
    --   CPU time = 359 ms,  elapsed time = 982 m
    ++

    Je reste sur ma faim
    Parce que tu ne nous montres pas le nombre de pages lues avec le
    Comme tu le sais le CPU time et elapsed time sont aléatoires

    Et je me méfie de les prendre comme indicateur de performance ....

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  10. #10
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    [code]USE tempdb;
    GO

    CREATE TABLE temps
    (
    date DATETIME
    );
    GO

    INSERT temps VALUES (DATEADD(m, -1 * RAND() * 100, GETDATE()));
    GO 200000
    [APPARTEE]
    Excellent ce "GO 200000" pour exécuter l'instruction en boucle.
    SImple et très pratique.
    [/APPARTEE]

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

Discussions similaires

  1. Nombre de jours dans le mois
    Par vpourchet dans le forum Débuter
    Réponses: 4
    Dernier message: 19/08/2017, 00h07
  2. Date : Nombre de jour dans le mois
    Par grunk dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2008, 16h48
  3. Réponses: 4
    Dernier message: 28/05/2007, 19h38
  4. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01
  5. [CR]nombre de jours dans un mois donné
    Par liberio dans le forum Formules
    Réponses: 2
    Dernier message: 20/04/2004, 16h54

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