Générer efficacement une séquence de dates T-SQL
Dans diverses tâches de traitement de données, il est souvent nécessaire de créer un ensemble de résultats de date dans une plage spécifiée. Par exemple, vous devez générer une liste de dates comprises entre une date de début et une date de fin.
Méthode basée sur une boucle
Une façon courante de générer une séquence de dates consiste à utiliser une boucle WHILE, comme indiqué ci-dessous :
<code class="language-sql">-- 此方法效率低下,尤其是在处理大范围日期时。</code>
Cependant, cette approche est inefficace, surtout lorsqu'il s'agit de grandes plages de dates.
Utiliser une table numérique
Une solution plus efficace consiste à utiliser la table MASTER.DBO.SPT_VALUES, qui fournit une séquence de nombres de 1 à 2047. En utilisant cette table avec la fonction DATETADD, vous pouvez générer un ensemble de dates dans une plage spécifiée à l'aide de la requête suivante :
<code class="language-sql">DECLARE @dt datetime, @dtEnd datetime SET @dt = GETDATE() SET @dtEnd = DATEADD(DAY, 100, @dt) SELECT DATETADD(DAY, number, @dt) FROM (SELECT number FROM MASTER.DBO.SPT_VALUES WHERE TYPE = 'P') AS n WHERE DATETADD(DAY, number, @dt) < @dtEnd</code>
Cette requête génère un ensemble de résultats de dates de @dt à @dtEnd-1.
Fonctionnalités SQL Server 2008 et versions ultérieures
SQL Server 2008 a introduit la fonction GENERATE_SERIES, qui peut générer des séquences numériques. Cette fonction peut être utilisée pour générer un ensemble de résultats de date comme suit (SQL Server 2008 ou version ultérieure) :
<code class="language-sql">DECLARE @Start datetime, @End datetime SET @Start = '2024-01-01' SET @End = '2024-12-31' SELECT DATEADD(DAY, n, @Start) FROM (SELECT TOP (DATEDIFF(DAY, @Start, @End) + 1) n = ROW_NUMBER() OVER (ORDER BY object_id)) AS SubTable ORDER BY n</code>
Cette requête renvoie un ensemble de résultats de dates de @Start à @End (inclus).
En utilisant ces techniques, vous pouvez générer efficacement des ensembles de résultats de dates croissantes dans une plage définie par l'utilisateur dans T-SQL.
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!