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
Libérer: 2025-01-11 20:16:48
original
280 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal