Cet article présente des techniques efficaces pour créer un ensemble de résultats contenant une séquence de dates dans une plage donnée à l'aide de T-SQL. Nous explorerons les méthodes pour générer cette série de dates, en nous concentrant sur des approches optimisées.
Établissons nos dates de début et de fin :
<code class="language-sql">DECLARE @StartDate datetime = 'Mar 1 2009', @EndDate datetime = 'Aug 1 2009'</code>
Une méthode simple, mais moins efficace, utilise une WHILE
boucle :
<code class="language-sql">DECLARE @currentDate datetime SET @currentDate = @StartDate WHILE @currentDate <= @EndDate BEGIN SELECT @currentDate SET @currentDate = DATEADD(day, 1, @currentDate) END</code>
Cette approche itérative fonctionne, mais elle peut être lente pour les grandes plages de dates.
spt_values
(SQL Server 2005 et versions ultérieures)Pour améliorer les performances, en particulier avec des plages de dates plus larges, exploitez la spt_values
table système (disponible dans SQL Server 2005 et versions ultérieures) :
<code class="language-sql">DECLARE @StartDate datetime, @EndDate datetime; SET @StartDate = GETDATE(); SET @EndDate = DATEADD(day, 100, @StartDate); SELECT DATEADD(day, number, @StartDate) AS DateValue FROM master..spt_values WHERE type = 'P' AND DATEADD(day, number, @StartDate) <= @EndDate;</code>
Cette requête génère efficacement la série de dates en ajoutant des nombres séquentiels de spt_values
à la date de début et en filtrant pour inclure uniquement les dates comprises dans la plage spécifiée. Cette méthode est nettement plus rapide que l’approche basée sur les boucles pour les ensembles de données plus volumineux. Le tableau master..spt_values
fournit une séquence de nombres facilement disponible, ce qui le rend idéal pour cette tâche.
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!