Obtenir toutes les dates entre deux dates dans SQL Server
Comment obtenir les dates entre deux dates?
J'ai une variable @MAXDATE
qui est de stocker la date maximale de la table. Maintenant je veux obtenir toutes les dates entre @Maxdate
et GETDATE()
et voulez stocker la date dans un curseur.
Jusqu'à présent j'ai fait comme suit:
;with GetDates As
(
select DATEADD(day,1,@maxDate) as TheDate
UNION ALL
select DATEADD(day,1, TheDate) from GetDates
where TheDate < GETDATE()
)
Cela fonctionne parfaitement, mais lorsque je suis en train de stocker ces valeurs dans un curseur
SET @DateCurSor=CURSOR FOR
SELECT TheDate
FROM GetDates
Erreur De Compilation
Syntaxe incorrecte près du mot clé "SET".
Comment résoudre ce problème.
Merci d'avance
source d'informationauteur user3193557
Vous devez vous connecter pour publier un commentaire.
Ma première suggestion serait d'utiliser votre calendrier de tablesi vous n'en avez pas, créez-en un. Ils sont très utiles. Votre requête est alors aussi simple que:
Si vous ne voulez pas ou ne pouvez pas créer un calendrier de table, vous pouvez toujours le faire à la volée, sans une expression de table commune récursive:
Pour de plus amples informations sur ce point, voir:
Quant à puis à l'aide de cette séquence de dates dans un curseur, je voudrais vraiment vous recommande de trouver un autre moyen. Il y a généralement un ensemble de remplacement qui va effectuer beaucoup mieux.
Donc avec vos données:
Pour obtenir la quantité sur 28-04-2014 (qui je le ramasser à votre exigence), vous n'avez pas réellement besoin de l'un des ci-dessus, vous pouvez simplement utiliser:
Si vous ne voulez pas pour un élément particulier:
Vous pouvez utiliser ce script pour trouver des dates entre les deux dates. Référence prise à partir de cet Article:
De créer facilement un Tableau de Valeur de la Fonction qui retourne un tableau avec toutes les dates.
Dates d'entrée en tant que chaîne de
Vous pouvez personnaliser la date dans le format que vous souhaitez '01/01/2017" ou "01-01-2017" dans un format de chaîne (103,126 ...)
Essayer cette
Pour exécuter la fonction de cela:
La sortie sera
Viens de dire...c'est ici une approche plus simple pour cela:
J'ai énuméré les dates des 2 Semaines plus tard. Vous pouvez utiliser la variable @période OU de la fonction datediff(dd, @date_start, @date_end)
C'est la méthode que je voudrais utiliser.
Voici un exemple similaire, mais cette fois, les dates sont espacées d'une heure d'intervalle pour faciliter la compréhension de la façon dont la requête fonctionne:
Comme vous pouvez le voir, la requête est rapide, précis et polyvalent.