2014-07-11 3 views
-3

Je me demandais s'il existe un moyen de récupérer une liste de toutes les dates dans SQL Server. Je sais que l'utilisation de la fonction getdate() récupérera la date et l'heure actuelles. Y a-t-il une fonction qui retournera une liste de toutes les dates?Récupération de dates SQL Server

+1

quoi ??????????? –

+1

étant donné qu'il y a environ 14 milliards de "dates", et et un nombre infini de fois pour chacune de ces dates, vous allez attendre un certain temps pour les résultats de votre requête. Et si vous voulez inclure des dates FUTURES, cela prendra encore quelques minutes. –

+0

Toutes les dates? Mais je pensais que le temps était infiniment grand ... – DMason

Répondre

3

Non à partir d'une fonction intégrée, non, mais vous pouvez créer votre propre function qui fait cela.

Vous pouvez générer une liste de dates par ce qui suit:

Declare @FromDate Date = '2014-04-21', 
     @ToDate  Date = '2014-05-02' 

;With Date (Date) As 
(
    Select @FromDate Union All 
    Select DateAdd(Day, 1, Date) 
    From Date 
    Where Date < @ToDate 
) 
Select Date 
From Date 
Option (MaxRecursion 0) 

Dans cette logique, vous pouvez créer votre propre function à faire de même:

Create Function udf_GenerateDateRange(@From Date, @To Date) 
Returns @Date Table 
(
    Date Date 
) 
As Begin 

    ;With Date (Date) As 
    (
     Select @From Union All 
     Select DateAdd(Day, 1, Date) 
     From Date 
     Where Date < @To 
    ) 
    Insert @Date 
    Select Date 
    From Date 
    Option (MaxRecursion 0) 

    Return 
End 

Utilisation du function vous pouvez sélectionner tout dans la plage de dates via:

Select * From udf_GenerateDateRange('2014-01-01', '2014-05-10') 

I d Vous ne savez pas ce que vous entendez par "toutes les dates", mais vous devriez être en mesure de transmettre une date de début et une date de fin, et cela retournera tout entre les deux.

+0

Je ne peux pas voter parce que je n'ai aucune idée de ce que le PO demande –

+0

Je lis sa question comme "Comment puis-je générer une liste de dates?" – Siyual

+0

Merci beaucoup pour votre réponse. C'est exactement ce que je cherchais - même si j'avais du mal à décoder ce que je voulais haha ​​ – user3109653

3

Cette fonction vous donnera une liste de dates du début à la fin avec une fréquence spécifiée.

IF OBJECT_ID('ListDates') IS NOT NULL DROP FUNCTION ListDates 
GO 

CREATE FUNCTION [dbo].[ListDates] 
/* 
    returns a list of intervals with the given frequency that start after @StartDate and 
    before @EndDate. 
*/ 
(
    @Frequency int, 
    @StartDate DateTime, 
    @EndDate DateTime) 
/* 
    @Frequency: 
     0 - day, 
     1 - week, 
     2 - month 
     3 - 3 months 
     4 - 6 months 
     5 - year 
*/ 
returns @List TABLE (StartRange Date, EndRange Date) 
BEGIN 
    with dates as (
     SELECT cast(@StartDate as Date) [date] 
     UNION ALL 
     SELECT 
     CASE @Frequency 
      WHEN 0 THEN DATEADD(day,1,t.date) 
      WHEN 1 THEN DATEADD(week,1,t.date) 
      WHEN 2 THEN DATEADD(month,1,t.date) 
      WHEN 3 THEN DATEADD(month,3,t.date) 
      WHEN 4 THEN DATEADD(month,6,t.date) 
      WHEN 5 THEN DATEADD(year,1,t.date) 
     END 
     FROM dates t 
     WHERE t.[date] < @EndDate 
    ) 
    insert into @List (StartRange, EndRange) 
    select 
     [Date], 
     CASE @Frequency 
      WHEN 0 THEN DATEADD(day,1,[Date]) 
      WHEN 1 THEN DATEADD(week,1,[Date]) 
      WHEN 2 THEN DATEADD(month,1,[Date]) 
      WHEN 3 THEN DATEADD(month,3,[Date]) 
      WHEN 4 THEN DATEADD(month,6,[Date]) 
      WHEN 5 THEN DATEADD(year,1,[Date]) 
     END 
    from dates 
    WHERE [Date] < @EndDate 
    OPTION (MAXRECURSION 10000) 
    RETURN 
END 
GO 
Questions connexes