Générer une séquence de dates dans la plage spécifiée
Question :
Comment obtenir efficacement toutes les dates dans une plage spécifiée et les stocker dans un curseur ?
Solution :
Utiliser le tableau des dates
Les tables de dates offrent un moyen simple et direct de récupérer des dates. Si disponible, utilisez une requête telle que :
DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date < @MaxDate;
Générer dynamiquement une séquence
Si vous n'avez pas de table de dates, vous pouvez utiliser la requête suivante pour générer une séquence de dates :
DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;
Évitez d'utiliser des curseurs
Pour améliorer les performances, envisagez d'utiliser une alternative basée sur une collection à la place des curseurs. Par exemple, pour récupérer les quantités pour un article et une date spécifiques :
DECLARE @ToDate DATE = '20140428'; SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date <= @ToDate ORDER BY Date DESC;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!