Générer une plage de dates dans SQL Server
Dans SQL Server, la tâche consistant à remplir une plage de dates entre deux dates données dans un tableau peut être simplifiée en utilisant plusieurs méthodes. Une méthode efficace consiste à utiliser une table numérique ou une table de comptage pour générer une série d’entiers.
Sur la base de la demande de remplissage du tableau avec des dates comprises entre le '2011-09-01' et le '2011-10-10', la solution suivante peut être implémentée :
<code class="language-sql">DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' SELECT DATEADD(DAY, nbr - 1, @StartDate) FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr FROM sys.columns c ) nbrs WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)</code>
Ce code génère une liste d'entiers allant de 1 à la différence entre la date de début et la date de fin. En soustrayant 1 à chaque nombre entier et en l'ajoutant à la date de début, il génère un tableau de dates commençant par « 2011-09-01 » et se terminant par « 2011-10-10 ».
Alternativement, une table de comptage base zéro peut être utilisée pour simplifier les calculs :
<code class="language-sql">CREATE TABLE [dbo].[nbrs]( [nbr] [INT] NOT NULL ) ON [PRIMARY] INSERT INTO dbo.nbrs (nbr) SELECT nbr-1 FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr FROM sys.columns c ) nbrs DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' SELECT DATEADD(DAY, nbr, @StartDate) FROM nbrs WHERE nbr <= DATEDIFF(DAY, @StartDate, @EndDate)</code>
En stockant de manière permanente une table de nombres dans la base de données, vous pouvez la réutiliser pour de futures requêtes, éliminant ainsi le besoin de sous-requêtes et de récursion, garantissant ainsi performances et efficacité.
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!