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 :

Numéro de semaine [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    unix
    Inscrit en
    Septembre 2016
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 83
    Points : 58
    Points
    58
    Par défaut Numéro de semaine
    bonjour a tous

    j'ai besoin de récupérer le numéro de la semaine actuelle

    j'était devant deux instruction tsql ou j'arrive pas comprendre la différence entre les deux une me renvois 38 et l'autre 39 bien sur pour la date d'aujord'huit '2016-09-24'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datepart(week,getdate())
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select datepart(iso_week,getdate())
    Alors quel est l'instruction le plus juste ?

  2. #2
    Membre éclairé Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 332
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Iso_week respecte la norme iso (ISO 8601 de mémoire)
    Les semaines commencent un lundi et se terminent un dimanche.
    La première semaine de l'année est la première qui contient au moins 4 jours ou la première semaine qui contient un jeudi (ce qui revient au même).

    Week : le résultat donné par datepart(week, tadate) dépend de la configuration de datefirst (SET DateFIRST). ca peut être utile lorsqu'on parle d'année budgétaire. l'année budgétaire pouvant commencer le 1er juillet.

    Cordialement,
    Loïc BERNARD
    Consultant Senior dba sql server & Microsoft Business Intelligence



    Il n'y a jamais de problèmes, il n'y a que des solutions!

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par cristophe0071983 Voir le message
    bonjour a tous

    j'ai besoin de récupérer le numéro de la semaine actuelle

    j'était devant deux instruction tsql ou j'arrive pas comprendre la différence entre les deux une me renvois 38 et l'autre 39 bien sur pour la date d'aujord'huit '2016-09-24'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datepart(week,getdate())
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select datepart(iso_week,getdate())
    Alors quel est l'instruction le plus juste ?

    week donne les numéro de semaines US et iso_weeki à la norme ISO. En france, comme en europe, comme dans la majorité du monde la norme ISO est utilisée. Les américains, continuant d'utiliser le galon, le pied, le miles...

    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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    week donne les numéro de semaines US et iso_weeki à la norme ISO. En france, comme en europe, comme dans la majorité du monde la norme ISO est utilisée. Les américains, continuant d'utiliser le galon, le pied, le miles...
    Tu oublies aussi l'once et le degré Fahrenheit...
    En tout cas, je cherche toujours une fonction semaine type ISO qui marcherait avec le Dimanche comme premier jour de la semaine et qui arriverait à correctement gérer le changement d'année...
    Nom : semaines.png
Affichages : 2912
Taille : 11,3 Ko

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    mais c'est bien celle-ci ! et le calcul fait par SQL Server est correct...
    C'est peut être la définition qui ne te convient pas :
    "la semaine 1 est celle qui contient le premier jeudi de l'année."

    L'extrait que tu donne est parfaitement conforme....

    Ref :
    https://fr.wikipedia.org/wiki/ISO_8601
    https://fr.wikipedia.org/wiki/Numéro...O_des_semaines

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

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par SQLpro Voir le message
    mais c'est bien celle-ci ! et le calcul fait par SQL Server est correct...
    Effectivement, SQL Server calcule de la bonne manière. Mais son besoin est de définir le premier jour de la semaine. Il veut qu'une semaine commence le dimanche et non le lundi, c'est-à-dire qu'un dimanche et un lundi qui se suivent aient le même numéro de semaine (tu m'arrêtes si je me trompe 7gyY9w1ZY6ySRgPeaefZ ).

    Dans ce cas, pourquoi ne pas simplement ajouter un jour lorsque tu veux récupérer le numéro de semaine :
    Code SQL : 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
     
     
    WITH periode AS (
    	SELECT CONVERT(DATETIME2, '2014-12-24') AS jour
    	UNION ALL
    	SELECT DATEADD(DAY, 1, jour) FROM periode WHERE jour <= '2015-01-08'
    )
    select	P.jour AS 'Date',
    		S.nom, 
    		datepart(week,P.jour) AS 'sem_pas_iso', 
    		datepart(iso_week, P.jour) AS 'sem_iso', 
    		datepart(iso_week, DATEADD(day, 1, P.jour)) AS 'sem_iso_dim'
    		from periode AS P
    INNER JOIN (
    SELECT 1 AS jour, 'Lundi' AS nom
    UNION
    SELECT 2 AS jour, 'Mardi' AS nom
    UNION
    SELECT 3 AS jour, 'Mercredi' AS nom
    UNION
    SELECT 4 AS jour, 'Jeudi' AS nom
    UNION
    SELECT 5 AS jour, 'Vendredi' AS nom
    UNION
    SELECT 6 AS jour, 'Samedi' AS nom
    UNION
    SELECT 7 AS jour, 'Dimanche' AS nom
    ) AS S ON datepart(WEEKDAY, P.jour) = S.jour
    ORDER BY P.jour

    Nom : capture_requete.png
Affichages : 2867
Taille : 16,7 Ko
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Effectivement, SQL Server calcule de la bonne manière. Mais son besoin est de définir le premier jour de la semaine. Il veut qu'une semaine commence le dimanche et non le lundi, c'est-à-dire qu'un dimanche et un lundi qui se suivent aient le même numéro de semaine (tu m'arrêtes si je me trompe 7gyY9w1ZY6ySRgPeaefZ ).
    Dans ce cas, pourquoi ne pas simplement ajouter un jour lorsque tu veux récupérer le numéro de semaine
    Effectivement tu as bien compris mon besoin, dorinf, et ta méthode a l'air de marcher malgré sa brillante simplicité !
    J'ai regarder pour les 10 dernières années et tout est beau. Je pensais à un problème pour les cas où le 1er janvier serait un dimanche ou un lundi mais ça marche au poil.
    Merci bien !

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

Discussions similaires

  1. [Crystal] transformation d'une date en numéro de semaine
    Par barna dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/03/2017, 09h41
  2. [C#] Comment récupérer le numéro de semaine d'une date ?
    Par farfadet dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/07/2013, 16h33
  3. [excel]calcul du numéro de semaine
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/10/2005, 11h57
  4. [Calendar] Problème de numéro de semaine de l'année
    Par gaia_dev dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 29/11/2004, 11h44
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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