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 :

Fonction date qui permet de récupérer les dates qui se trouvent dans un intervalle


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Debuttant en developpement d'application
    Inscrit en
    Novembre 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Guinée

    Informations professionnelles :
    Activité : Debuttant en developpement d'application

    Informations forums :
    Inscription : Novembre 2014
    Messages : 86
    Points : 55
    Points
    55
    Par défaut Fonction date qui permet de récupérer les dates qui se trouvent dans un intervalle
    Bonjour tout le monde,
    J'aimerais savoir s'il y a une fonction qui me permet de trouver
    les dates qui se trouve dans un intervalle que je donne. Par exemple
    avec 2005-01-01/2005-01-31 que je puis avoir les date qui se trouve
    dans cet intervalles.
    MERCI d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez faire une requête récursive.
    Vous pouvez aussi vous appuyer sur une table calendrier, soit générée à la volée, mais mieux, en dur, contenant à l'avance toutes les dates nécessaires

  3. #3
    Invité
    Invité(e)
    Par défaut
    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
    -- TABLE DE DATES
    CREATE TABLE Monitoring_DBA.Dates ( date DATETIME NOT NULL CONSTRAINT PK_Dates_date PRIMARY KEY ) 
     
    WITH SR as ( SELECT CAST('2009-01-01' AS DATETIME) dateDeb , CAST('2015-01-01' AS DATETIME) dateFin ),
    CTE_DATES AS ( 
    	SELECT dateDeb AS Date from SR
    	UNION ALL 
    	SELECT Date + 1 FROM CTE_DATES join SR on Date <= dateFin 
    ) 
    INSERT INTO Monitoring_DBA.[Dates] ([date])
    SELECT Date 
    FROM CTE_DATES 
    join SR 
    	on Date <= dateFin 
    OPTION (MAXRECURSION 32000) 
     
    select * from Monitoring_DBA.Dates

  4. #4
    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,

    Si la table utilitaire calendrier est la meilleure option, mais que vous êtes contraint de réaliser une fonction, voici le code :

    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
    CREATE FUNCTION fn_get_dates_from_interval
    	(
    		@_start_date date
    		, @_end_date date
    	)
    RETURNS TABLE
    AS
    RETURN
    (
    	WITH
    		CTE AS
    		(
    				SELECT	@_start_date AS une_date
    			UNION ALL
    				SELECT	DATEADD(day, 1, une_date)
    				FROM	CTE
    				WHERE	une_date < @_end_date
    		)
    	SELECT	une_date
    	FROM	CTE
    )
    GO
    Et un exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	*
    FROM	dbo.fn_get_dates_from_interval('2005-01-01', '2012-01-31')
    OPTION	(MAXRECURSION 366)
    Notez que le niveau de récursivité maximal est de 100.
    Donc, si l'écart en nombre de jours entre la date de début et de fin excède les 100 jours, vous devrez spécifier l'indicateur de requête MAXRECURSION, comme indiqué dans l'exemple.
    En revanche, si vous êtes absolument certain que cet écart n'excèdera jamais les 100 jours, vous pouvez vous passer de cet indicateur de requête : enlevez alors la dernière ligne de code de l'exemple ci-dessus.

    @++

Discussions similaires

  1. [Calendrier] Récupérer les dates des vacances scolaires, c'est possible ?
    Par fayred dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 13
    Dernier message: 10/10/2016, 18h45
  2. Récupérer les dates de l'année en cours sur SQL Server
    Par And_res dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/10/2008, 09h51
  3. Réponses: 11
    Dernier message: 05/06/2008, 11h04
  4. Réponses: 4
    Dernier message: 11/02/2008, 19h43
  5. Fonction qui permet de récupérer le type d'un champ
    Par suolan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2006, 16h47

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