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!