Maison >base de données >tutoriel mysql >Comment puis-je générer efficacement un ensemble de résultats de plage de dates dans T-SQL ?

Comment puis-je générer efficacement un ensemble de résultats de plage de dates dans T-SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-11 20:16:48280parcourir

How Can I Efficiently Generate a Date Range Resultset in T-SQL?

Générer une série de dates en T-SQL

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.

Définir la plage de dates

É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 approche basée sur la boucle (moins efficace)

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.

Approche optimisée utilisant 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn