Génération de plages de dates dans SQL Server
Fréquemment, les administrateurs de bases de données doivent remplir les tables avec des plages de dates. Cet article présente des méthodes SQL Server efficaces pour y parvenir.
Une technique courante utilise une ROW_NUMBER()
sous-requête pour générer une séquence numérique :
<code class="language-sql">DECLARE @StartDate DATE = '20110901'; DECLARE @EndDate DATE = '20111001'; 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>
Cette sous-requête crée une série de nombres, puis DATEADD()
incrémente la date de début de chaque nombre pour produire la plage de dates.
Une alternative plus performante utilise un tableau de pointage préexistant (si disponible) :
<code class="language-sql">SELECT DATEADD(DAY, nbr, @StartDate) FROM nbrs WHERE nbr <= DATEDIFF(DAY, @StartDate, @EndDate);</code>
Cela évite les requêtes récursives, offrant un avantage de vitesse significatif lorsque vous traitez de grandes plages de dates. Le tableau de pointage contient une séquence de nombres pré-générées, éliminant ainsi le besoin de génération de numéros à la volée.
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!