Maison >base de données >tutoriel mysql >Comment générer efficacement une séquence de dates dans une plage donnée ?
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 :
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date < @MaxDate;</code>
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 :
<code class="language-sql">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;</code>
É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 :
<code class="language-sql">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;</code>
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!