Maison >base de données >tutoriel mysql >Comment récupérer efficacement toutes les dates entre deux dates dans SQL Server ?

Comment récupérer efficacement toutes les dates entre deux dates dans SQL Server ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 10:13:43735parcourir

How to Efficiently Retrieve All Dates Between Two Dates in SQL Server?

Astuces pour obtenir toutes les dates entre deux dates dans SQL Server

Dans SQL Server, obtenir toutes les dates dans une plage de dates spécifiée est utile pour des tâches telles que l'analyse des données, le traitement des dates et la sauvegarde des enregistrements. Cet article présentera plusieurs méthodes pour obtenir efficacement une séquence de dates consécutives entre deux dates données.

Utiliser des expressions de table communes récursives (CTE)

Une solution consiste à utiliser le CTE récursif. Un exemple est le suivant :

<code class="language-sql">;with GetDates As
(
    select DATEADD(day,1,@maxDate) as TheDate
    UNION ALL
    select DATEADD(day,1, TheDate) from GetDates
    where TheDate < @minDate
)
select TheDate from GetDates</code>

Cependant, bien que ce CTE fonctionne pour sélectionner des dates, cela devient difficile en raison d'erreurs de compilation lors de la tentative de stockage des résultats dans un curseur.

Méthodes alternatives

Pour augmenter l'efficacité et simplifier les opérations, envisagez les alternatives suivantes :

1. Utiliser le tableau des dates

Si vous créez une table de dates à l'avance, la requête devient très simple :

<code class="language-sql">DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  Date
FROM    dbo.Calendar
WHERE   Date >= @MinDate
AND     Date <= @MaxDate;</code>

2. Générer une séquence de dates sans table de dates

Si vous n'avez pas de table de dates, vous pouvez générer dynamiquement une séquence de dates en utilisant la technique suivante :

<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>

3. Évitez d'utiliser des curseurs pour l'itération de date

Il est généralement recommandé d'éviter d'utiliser des curseurs pour l'itération de date. Les approches basées sur la collecte sont généralement plus efficaces et évolutives. Par exemple, si vous souhaitez récupérer la quantité pour une date précise, vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT  TOP 1 date, it_cd, qty
FROM    T
WHERE   it_cd = 'i-1'
AND     Date = '20140101';</code>

En évitant l'utilisation de curseurs et en tirant parti de ces techniques alternatives, vous pouvez récupérer efficacement toutes les dates comprises dans une plage spécifiée dans SQL Server.

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