web-dev-qa-db-fra.com

Comment générer une liste de dates --- c'est-à-dire tous les jours au cours des 2 dernières années?

Nous utilisons un système de Business Intelligence et devons charger une liste de dates afin que nous puissions les marquer comme "la semaine dernière" ou "12 derniers mois" ou une valeur dynamique.

Je me demande quel est le moyen le plus simple de générer virtuellement un tableau qui répertorie simplement les dates dans une colonne, littéralement chaque date du '01/01/2014' à la date actuelle (les autres colonnes, je peux utiliser une formule à partir de là). En fait, même l'ajout de dates futures sur un an serait probablement utile également.

Maintenant, oui, je peux récupérer des dates distinctes dans une autre table de faits aléatoires contenant des milliers d'entrées, mais cela semble bâclé et crée une dépendance là où il ne devrait vraiment pas y en avoir.

3
user45867

En utilisant T-SQL pur, vous pouvez effectuer les opérations suivantes:

;WITH cte AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor]
  FROM   [master].[sys].[columns] sc1
  CROSS JOIN [master].[sys].[columns] sc2
)
SELECT DATEADD(DAY, cte.[Incrementor], '2014-01-01')
FROM   cte
WHERE  DATEADD(DAY, cte.[Incrementor], '2014-01-01') < GETDATE();

Ou, j'ai également écrit une fonction SQLCLR pour rendre cela un peu plus facile, qui est disponible dans la version gratuite de la bibliothèque SQL # :

SELECT [DatetimeVal]
FROM   [SQL#].[Util_GenerateDateTimeRange]('2014-01-01', GETDATE(), 1, N'day');

Si vous souhaitez que la date de fin soit ultérieure, remplacez simplement la GETDATE() dans l'une ou l'autre requête.

4
Solomon Rutzky

Essaye ça.

https://stackoverflow.com/questions/1378593/get-a-list-of-dates-between-two-dates-using-a-function/1378788#1378788

Vous n'avez pas besoin d'une table différente, mais si vous en avez une, cela pourrait vous aider.

0
Rob Farley