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 :

[Requête] Difficile (impossible ?) avec des dates


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Requête] Difficile (impossible ?) avec des dates
    Bonjour

    voilà donc mon problème. J'ai une table (sous sql server 2000) de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE periodes (
      date_deb     smalldatetime,
      date_fin     smalldatetime,
      id_employe   uniqueidentifier references employes,
      ...
    )
    Je voudrais faire une requête dans cette table afin de trouver un enregistrement par jour, du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    | date_jour | id_employe | ... |
    |___________|____________|_____|
    |
    par exemple, j'ai défini ma période pour l'employé starch du 02/09/2004 au 06/08/2004, et je voudrais récupérer un enregistrement par jour pour tous les jours du 3/03/2004 au 5/04/2004...

    pour l'instant j'ai une requête du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select '03/03/2004' as date_jour, id_employe, ...
    from periodes
    where periodes.date_deb <= '03/03/2004'
    and periodes.date_fin >= '03/03/2004'
    ça marche bien, mais je voudrais pouvoir faire ça pour plusieurs jours...

    Si quelqu'un a une idée, je suis preneur
    Merci Beaucoup
    ++ Starch'

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    salut, une possibilite:

    cree une table calendrier qui contient tous les jours (ouais tous) dans un champ date,

    cree une premiere requete selectionnant tous les champs date, et les champs correspondats dans ta table avec en jonction: on calendrier.date >= periodes.date_deb

    cree une seconde requete sur la base de la precedente avec en jonction: calendrier.date <= periodes.date_fin

    (Bien evidemment c'est fesable en une seule requete et faut pas oublier de garder sa table calendrier a jour )

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    D'abord merci beaucoup

    Citation Envoyé par Piotrek

    cree une table calendrier qui contient tous les jours (ouais tous) dans un champ date,
    Je pensais à cette solution mais elle ne me convient pas pour deux raisons :

    La première c'est que je trouve ça vilain personnellement (quoique j'ai déjà une table jour fériés, pourquoi pas jours avec un flag quand ils sont fériés) ;

    La deuxième c'est que si les mecs derrière ils font une requête et que les jours n'y sont pas (dans la table de tous les jours) je suis dans la merde, à moins de mettre un trigger argh !

    enfin bref, l'idéal serait de pouvoir créer une table temporaire contenant tous les jours de l'intervalle, mais je doute qu'une procédure puisse me renvoyer une table... (d'ailleurs si c'est possible je prends !)

    Je pensais aussi à faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND date_jour IN ('03/03/2004', ...)
    mais vu que je n'ai ce champ date_jour dans aucune table :/

    Enfin, au pire, je vais me remplir une table supplémentaire avec des jours...

    Merci
    ++ Starch'

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    oué !!! j'ai trouvé !!!

    je me penchais sur les procedures, alors que les fonctions étaient mes amies.
    J'ai créé 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
    21
    22
    23
     
    CREATE FUNCTION fn_day_interval
      (@begin_date smalldatetime,
       @end_date   smalldatetime
      )
    RETURNS
      @result_table TABLE
        ( day_date smalldatetime)
     
    AS
      BEGIN
        DECLARE @current_date smalldatetime
     
        SELECT @current_date = @begin_date
     
        WHILE @current_date <= @end_date
          BEGIN
            INSERT INTO @result_table (day_date) VALUES(@current_date)
            SELECT @current_date = DATEADD(day, 1, @current_date)
          END
     
        RETURN
      END
    ensuite, c'est comme si j'avais ma table de jours, en appelant la fonction fn_day_interval avec les bons paramètres !

    /me content

    (si problème il y'a avec ma méthode, n'hésitez pas !)

    Merci pour l'inspiration
    ++ Starch'

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

Discussions similaires

  1. VB + Excel + SQL + Soucis requête avec des dates
    Par Invité dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2009, 08h15
  2. Requête paramétrée avec des dates
    Par The eye dans le forum Oracle
    Réponses: 4
    Dernier message: 21/01/2009, 15h20
  3. Requête avec des dates
    Par Danielle80 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/11/2007, 12h57
  4. requête avec des dates
    Par brigdid dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/06/2007, 09h22
  5. SQL Requête avec des dates
    Par dahu29 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/03/2006, 18h20

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