Maison > base de données > tutoriel mysql > Comment puis-je générer efficacement une série de dates dans T-SQL ?

Comment puis-je générer efficacement une série de dates dans T-SQL ?

DDD
Libérer: 2025-01-11 20:01:43
original
772 Les gens l'ont consulté

How Can I Efficiently Generate a Series of Dates in T-SQL?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal