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
Libérer: 2025-01-12 10:13:43
original
691 Les gens l'ont consulté

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

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

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

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

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!

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