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 :

Retrouver le numéro de la semaine à partir d'une date


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Points : 57
    Points
    57
    Par défaut Retrouver le numéro de la semaine à partir d'une date
    Bonjour !
    J'aimerai effectuer une requête qui me permettrai de retrouver le numéro du week à partir d'une date donnée.
    Pouvez-vous m'aider sur ce point?
    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Quelque chose comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datepart(ww,getdate())

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Points : 57
    Points
    57
    Par défaut
    lol çà marche
    Merci beaucoup,

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    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 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    ATTENTION : cette fonction est fausse, car elle numérote les semaines par rapport aux usage américains qui sont différents des notres.
    Notre numérotation est basée sur le norme ISO et ce n'est pas la même chose !

    Si vous voulez faire cela, utilisez la fonction suivante :

    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
    CREATE FUNCTION dbo.F_NUMERO_SEMAINE_ISO  (@JOUR datetime)
    RETURNS int
    AS
    BEGIN
     
       DECLARE @NSI int;
     
       SET @NSI = DATEPART(wk, @JOUR) + 1 - DATEPART(wk, CAST(DATEPART(yy, @JOUR) as CHAR(4)) + '0104');
     
    -- cas particuliers : du 1 au 3 janvier, le jour peut appartenir à la dernière semaine de l'année précédente
       IF @NSI = 0
          SET @NSI = dbo.dbo.F_NUMERO_SEMAINE_ISO(CAST(DATEPART(yy,@JOUR)-1 AS CHAR(4)) + '12' + CAST(24 + DATEPART(DAY, @JOUR) AS CHAR(2))) + 1;
     
    -- cas particuliers : du 29 au 31 décembre, le jour peut appartenir à la première semaine de l'année suivante
       IF (DATEPART(mm, @JOUR) = 12) AND ( (DATEPART(dd, @JOUR) - DATEPART(dw, @JOUR) ) >= 28 ) 
          SET @NSI = 1;
     
       RETURN @NSI;
     
    END
    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/ * * * * *

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Bonjour SQLpro,

    Je dois travailler avec le numéro de semaine, et j'ai donc repris la fonction ci-dessus, mais...

    je suis un peu intrigué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT datepart(ww,getdate())
    m'indique qu'on est en semaine 11

    et la fonction ci-dessus m'indique qu'on est en semaine 10

    Or d'après mon agenda, on est dans la 11eme semaine.


    N'y a-t-il pas une erreur quelque part ?

  6. #6
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour,
    Cette année la première semaine compte bien 4 jours (jeudi au dimanche) si vous êtes en usage FR Plus de détail sur la numérotation des semaines:
    http://fr.wikipedia.org/wiki/Num%C3%...O_des_semaines
    Quel est votre langue d'installation pour SQL Serverur (Français ou Angalis)
    et quel est le premier jour de la semaine (normalement en France c'est Lundi (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select @@datefirst

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par jero44 Voir le message
    Bonjour,
    Bonjour
    Citation Envoyé par jero44 Voir le message
    Quel est votre langue d'installation pour SQL Serverur (Français ou Angalis)
    Français
    Citation Envoyé par jero44 Voir le message
    et quel est le premier jour de la semaine (normalement en France c'est Lundi (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select @@datefirst
    Cela me renvoie 7

  8. #8
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Donc cela signifie que le premier jour de la semaine est pour vous le dimanche
    POur positionner le lundi:
    SET DATEFIRST 1

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il doit y avoir une raison pour que le DATEFIRST vale 7 sur votre instance SQL Server.
    Quel est le langage de celle-ci ?

    @++

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    us_english

    Donc en fait si je comprends bien : le résultat est le bon mais c'est un hasard. Si je mets le datefirst à 1 ca sera faux avec le select datepart(ww,getdate()), mais exact avec la fonction de SQLpro.
    C'est bien ca ?

    Mais est-ce cohérent de mettre le datefirst à 1 si le language est "us_english" ?
    J'ai un peu peur des régression : /

    Du coup la solution serait peut-être de modifier le datefirst avant (1) et après (7) l'appel de la fonction de SQLpro...

    Merci pour vos réponses en tout cas !

  11. #11
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Mais est-ce cohérent de mettre le datefirst à 1 si le language est "us_english" ?
    Personnellement je ne trouve pas cela propre.
    C'est un cas particulier, mais si un jour vous devez internationaliser votre application, vous allez être dans la panade ...
    Il arrive aussi que certaines entreprises considèrent leur exercice ou leurs débuts de semaine le mercredi ...

    Du coup la solution serait peut-être de modifier le datefirst avant (1) et après (7) l'appel de la fonction de SQLpro...
    La fonction que vous a fourni SQLPro vous permet de retrouver le n° de semaine quel que soit la valeur affetée à DATEFIRST

    @++

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par elsuket Voir le message
    La fonction que vous a fourni SQLPro vous permet de retrouver le n° de semaine quel que soit la valeur affetée à DATEFIRST

    @++
    Dans ce cas pourquoi me renvoyait-elle 10, alors que selon mon agenda nous sommes en 11eme semaine ?

  13. #13
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Parce que la méthode de calcul de la fonction de SQLPro utilise la norme ISO pour calculer le n° de semaine.
    Mais vous êtes d'accord que celui-ci dépend de la valeur attribuée au paramètre DATEFIRST ?

    @++

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

Discussions similaires

  1. Déduire numéro de la semaine à partir d'une date
    Par Julien1504 dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 10/09/2013, 14h18
  2. Déduire le numéro de la semaine à partir d'une date
    Par Julien1504 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 14/08/2013, 14h00
  3. retrouver le numéro de la semaine à partir d'une date
    Par christophe_halgand dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/01/2008, 11h38
  4. le numéro d'une semaine à partir d'une date
    Par crazydede8 dans le forum C++
    Réponses: 5
    Dernier message: 22/09/2006, 20h27
  5. Réponses: 14
    Dernier message: 01/06/2006, 17h32

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