Maison >base de données >tutoriel mysql >Comment générer efficacement une séquence de dates dans une plage donnée ?

Comment générer efficacement une séquence de dates dans une plage donnée ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-12 10:03:43737parcourir

How to Efficiently Generate a Sequence of Dates within a Given Range?

Générer une séquence de dates dans la plage spécifiée

Question :

Comment obtenir efficacement toutes les dates dans une plage spécifiée et les stocker dans un curseur ?

Solution :

Utiliser le tableau des dates

Les tables de dates offrent un moyen simple et direct de récupérer des dates. Si disponible, utilisez une requête telle que :

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

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

Générer dynamiquement une séquence

Si vous n'avez pas de table de dates, vous pouvez utiliser la requête suivante pour générer une séquence de dates :

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

Évitez d'utiliser des curseurs

Pour améliorer les performances, envisagez d'utiliser une alternative basée sur une collection à la place des curseurs. Par exemple, pour récupérer les quantités pour un article et une date spécifiques :

<code class="language-sql">DECLARE @ToDate DATE = '20140428';

SELECT  TOP 1 date, it_cd, qty 
FROM    T
WHERE   it_cd = 'i-1'
AND     Date <= @ToDate
ORDER BY Date DESC;</code>

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