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 :

R�cup�rer tous les jours entre deux dates


Sujet :

D�veloppement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant Technique
    Inscrit en
    Janvier 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Consultant Technique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par d�faut R�cup�rer tous les jours entre deux dates
    Bonjour,

    Comment,� partir d'une requ�te, sortir tout les jours compris entre deux dates, une occurrence par date, je met un exemple:

    tout les jours entre 01/04/2012 et 31/05/2012 le r�sultat souhait� est:

    1. 01/04/2012
    2. 02/04/2012
    3. 03/04/2012
    4. 04/04/2012
    5. .......
    6. 29/05/2012
    7. 30/05/2012
    8. 31/05/2012


    Si �a peut aider, j'ai une requ�te qui le fait mais seulement c'est du PL/SQL:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    SELECT level + to_date('01-04-2012','DD-MM-RRRR') - 1 as jour from dual
    connect by level < to_date('31-05-2012','DD-MM-RRRR') - to_date('31-05-2012','DD-MM-RRRR') + 2
    D'avance merci!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par d�faut
    Cr�ez une table calendrier qui contient tous les jours. SQLPRO propose un article bien complet sur la gestion du temps avec, notamment, un mod�le de tables pour la gestion calendaire : http://sqlpro.developpez.com/cours/gestiontemps/

  3. #3
    Mod�rateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par d�faut
    Tout-�-fait d'accord avec vmolines pour le calendrier.
    �a ne co�te pas cher � impl�menter.

    Pour d�panner, vous pouvez passer par une CTE :
    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
    declare @dt1 datetime;
    declare @dt2 datetime;
     
    set @dt1 = CONVERT(datetime, '01/04/2012', 103);
    set @dt2 = CONVERT(datetime, '31/05/2012', 103);
     
    With Calendrier (dt) as
    (
    select @dt1
     union all
    select dt + 1
      from Calendrier
     where dt < @dt2
    )
      select dt
        from Calendrier
    order by dt asc;

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant Technique
    Inscrit en
    Janvier 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Consultant Technique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par d�faut
    Merci a tout les deux pour vos r�ponses qui sont des points d'attaques assez int�ressent, mais une contrainte est qu'il me faut utiliser qu'une seule requ�te.

    Je testerais, demain, tout de m�me la CTE, peut-�tre que �a passera (je vous tiendrez au courant).

    Sinon s'il y a d'autre proposition je suis aussi preneur

    Merci encore

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par d�faut
    Une fois la table "calendrier" en place, la requ�te est unique et on ne peut plus simple.

    Si vous parlez de la cr�ation du calendrier qui doit se faire via proc stock ou autre, ce n'est plus mono requ�te, mais c'est � faire une seule fois. Consid�rez �a comme partie int�grante de la structure. N'h�sitez pas � g�n�rer 200 ans d'un coup pour ne plus en parler, cela ne repr�sente que 73000 lignes mono colonne. Avec un type date, la taille des donn�es est ridicule.

    Pour les autres propositions, sans �tre p�remptoire, elles seront mauvaises. Quand vous requ�tez un SGBD, vous lui demandez des lignes qui existent. Si vous voulez "inventer" ces lignes � la vol�e (proc stock qui renvoie une table ou autre artifice), vous allez � l'encontre du fonctionnement de pr�dilection et ce sera une moins bonne solution.

    Vous avez besoin des jours du calendrier ? Faites une table qui les contient.

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant Technique
    Inscrit en
    Janvier 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Consultant Technique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par d�faut
    Bonjour,


    alors j'ai finalement opt� pour une fonction qui renvoie une table :

    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
     
    CREATE FUNCTION [dbo].[fn_getJours](@_dateDeb datetime
    									,@_dateFin datetime )
    				RETURNS @tb_dates TABLE (dates datetime NOT NULL )
    				WITH SCHEMABINDING
    AS
    BEGIN
    	set @_dateDeb = CAST(FLOOR(CAST(@_dateDeb AS FLOAT)) AS DATETIME)
    	set @_dateFin = CAST(FLOOR(CAST(@_dateFin AS FLOAT)) AS DATETIME)
     
    	WHILE @_dateDeb <= @_dateFin
    	BEGIN
     
    		INSERT INTO @tb_dates (dates) VALUES (@_dateDeb)
    		SELECT @_dateDeb = DATEADD(day, 1, @_dateDeb)
     
    	END
     
    	RETURN
    END
    GO
    J'ai lu vos r�ponse et bien compris que c'est pas la meilleure solution (puisque rien ne peut remplacer une bonne vieille table ) , mais pour mon cas c'est la plus adapt�

    Pour la CTE j'ai eu un probleme � cause la r�cursivit� (limite � 100)

    merci tout le monde

  7. #7
    Mod�rateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par d�faut
    Citation Envoy� par GsusNET Voir le message
    Pour la CTE j'ai eu un probleme � cause la r�cursivit� (limite � 100)
    Un petit tour sur MSDN vous aurait permis de d�couvrir l'option maxrecursion.

  8. #8
    Invit� de passage
    Homme Profil pro
    Conseil - Consultant en syst�mes d'information
    Inscrit en
    Juillet 2023
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 63
    Localisation : France, Seine et Marne (�le de France)

    Informations professionnelles :
    Activit� : Conseil - Consultant en syst�mes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2023
    Messages : 1
    Par d�faut solution assez simple (test�e sur SQL Server)
    Bonjour, ayant eu besoin d'avoir une requ�te qui me retourne toutes les dates calendaires sur une plage de dates, je suis tomb� sur ce topic. J'ai trouv� sur le Net une solution alternative assez simple :
    Dans l'exemple ci-dessous : Afficher toutes les dates calendaires comprises entre le 15/12/2020 et le 12/01/2024

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    SELECT  TOP (DATEDIFF(DAY, '2020-12-15', '2024-01-12') + 1)
        DateCal = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1,'2020-12-15')
    FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Script pour compter les jours entre deux dates
    Par bomonde dans le forum Shell et commandes GNU
    R�ponses: 12
    Dernier message: 17/10/2012, 18h54
  2. Lister tous les jours entre deux dates ?
    Par Gigli dans le forum Requ�tes
    R�ponses: 4
    Dernier message: 02/04/2012, 17h50
  3. Tous les jours entre deux dates
    Par karamurat dans le forum Langage SQL
    R�ponses: 6
    Dernier message: 13/01/2011, 15h53
  4. Calculer les jours entre deux dates
    Par Daniela dans le forum SQL
    R�ponses: 4
    Dernier message: 09/10/2008, 17h01
  5. R�ponses: 2
    Dernier message: 25/02/2008, 23h40

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