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 :

Gestion de Dates


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut Gestion de Dates
    Bonjour,
    J'ai une base SQL Server 2000, avec une table possédant un champs "date_X" pour chaque enregistrement.
    Mon but est de calculer des jours de "retard" et "d'avance" en fonction de la date du jour, et de cette date_X.

    En gros, la formule est :
    délai = date_du_jour - (date_X + 2_jours_ouvrés)

    J'ai donc deux options :

    - remplir mon tableau (interface VB.NET) manuellement dans le code, pour cette colonne, et pour chaque ligne (pas top)

    - ou bien créer une tâche automatique dans SQL server pour calculer le délai tous les jours et pour chaque enregistrement. Le problème est que je ne sais pas si il est possible de gérer les "jours ouvrés" dans SQL server... Peut-on faire des tests sur le jour de la semaine pour éventuellement rajouter 1 (si on tombe sur samedi) ou 2 jours (si on tombe sur un dimanche) au délai ?

    Voilà je ne sais pas si j'ai été très clair, en tout cas votre aide me serait très utile.
    Merci d'avance !

  2. #2
    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,
    Oui la fonction DATEPART permet d'extraire une partie de date (donc le jour de la semaine) à partir d'une donnée de type datetime. Le format à utiliser pour connaitre le n° du jour dans la semaine est DW soit dans votre cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select DATEPART(DW,getdate())

  3. #3
    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 : 43
    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,

    Vous pouvez écrire :

    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
    DECLARE @today DATETIME
    SET @today = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
     
    SELECT @today - (date_X + CASE DATENAME(weekday, @today)
    								WHEN 'Samedi' THEN 1
    								WHEN 'Dimanche' THEN 2
    								ELSE 0
    							END
    				) AS Delai
    FROM maTable
     
    -- Ou encore
    SELECT @today - (date_X + CASE DATEPART(dayofweek, @today)
    								WHEN 6 THEN 1 -- Samedi
    								WHEN 7 THEN 2 -- Dimanche
    								ELSE 0
    							END
    				) AS Delai
    FROM maTable
    @++

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut Presque au top !
    Merci à tous les deux, elsuket ça marche très bien !!!
    Juste une chose que je souhaite, et en SQL je suis une quiche :
    au lieu d'obtenir une date comme :
    1899-12-31 00:00:00.000 (obtenue dans mon test exemple)
    j'aimerais simplement obtenir +X ou -X (où X est le nombre de jours d'écart avec la date de référence)
    Comment fait-on ça en sql ?
    Merci d'avance !

  5. #5
    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 : 43
    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
    Effectivment erreur de ma part

    La fonction DATEDIFF vous retourne un écart entre deux dates, à vous de choisir l'unité de la différence (de millisecond à year)

    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
    DECLARE @today DATETIME
    SET @today = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
     
    SELECT DATEDIFF(day, @today, date_X + CASE DATENAME(weekday, @today)
    											WHEN 'Samedi' THEN 1
    											WHEN 'Dimanche' THEN 2
    											ELSE 0
    										END
    				) AS Delai
    FROM maTable
     
    -- Ou encore
    SELECT DATEDIFF(day, @today, date_X + CASE DATEPART(dayofweek, @today)
    											WHEN 6 THEN 1 -- Samedi
    											WHEN 7 THEN 2 -- Dimanche
    											ELSE 0
    										END
    				) AS Delai
    FROM maTable
    @++

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut Parfait
    Super, en fait il fallait 1 et 7 dans le case car la semaine commence par Dimanche, et je me suis fait une petite grille pour gérer les week-ends (car si ma date_X tombe un jeudi ou vendredi, les 2 jours + tard tombent aussi en week-end).

    Au final le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE @today DATETIME
    SET @today = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
    update maTable set Délai_Attente=DATEDIFF(day, @today, maTable.Date_X + 2 + CASE DATEPART(weekday, maTable.Date_X)
    											WHEN 1 THEN 1
    											WHEN 7 THEN 1
    											when 5 then 2
    											when 6 then 2
    											ELSE 0
    										END)

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

Discussions similaires

  1. gestion de date de fin de mois
    Par bzh56 dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/01/2005, 10h15
  2. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  3. [MCD] Gestion de date
    Par Seb7 dans le forum Schéma
    Réponses: 13
    Dernier message: 08/09/2003, 09h29
  4. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 13h01
  5. [BEST_PRACTICE][Merise] MCD & gestion de date
    Par Seb7 dans le forum Schéma
    Réponses: 4
    Dernier message: 16/04/2003, 17h07

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