SQL Server 2008 Générer une Série de date de fois
Je suis en train de générer une table avec une série de date de fois.
J'ai l'précisé date de début de l'heure et de la date de fin des temps(la date de fin de l'heure est à la fin de la séquence), j'ai ajouter un intervalle de temps ~ (cela peut varier) la date de début le temps en secondes et cela me donne la date de fin des temps.
La séquence suivante utilise la date de fin de temps que sa valeur de début et ajoute de l'intervalle de temps en secondes. Pour démontrer la sortie j'ai besoin. Est-il un moyen rapide de créer un tel tableau, autre que l'aide de beaucoup d'insérer dans les commandes?, Je suis vraiment perplexe
StartTime Endtime Duration
2011-07-20 11:00:33 2011-07-20 11:09:47 554
2011-07-20 11:09:47 2011-07-20 11:19:01 554
declare @StartTime datetime = '2011-07-20 11:00:33',
@EndTime datetime = '2011-07-20 15:37:34'
@Interval int = 554 -- this can be changed.
insert into tmp_IRange
values('2011-07-20 11:00:33', DATEADD(SECONDS, @Duration, 2011-07-20 11:00:33))
cela devient très fastidieux.. surtout quand la date de fin des temps est 2011-07-20 15:37:34
il y a beaucoup d'insérer des déclarations à faire 🙁
Notez que les réponses basées sur les expressions cte, la limite est de 32767 niveaux de récursivité. (Voir MAXRECURSION de la documentation.)
Ce n'est pas le cas.
MAXRECURSION 0
est illimité.Merci. Quand j'ai lu sur MAXRECURSION il y a quelques temps la limite de 32767 coincé dans mon petit cerveau. Le relisant, il est clairement dit zéro signifie illimité.
OriginalL'auteur mouse | 2011-08-22
Vous devez vous connecter pour publier un commentaire.
Utiliser une expression de table commune récursive
merci, fixe
Fonctionne un régal merci
OriginalL'auteur gbn
Ce sera donner à l'individu gammes, mais ignorera votre heure de fin (puisque c'est < @intervalle après la dernière plage valide):
Merci @Andriy, raté; supprimé première réponse.
OriginalL'auteur Aaron Bertrand
Cela devrait vous obtenir a commencé. Vous pouvez l'adapter à vos besoins spécifiques. Comme l'écrit, il va générer une ligne pour chaque minute de l'incrément de départ avec la date du jour & temps.
Oui, édité la description et l'incrémente. Comme il l'a été, la requête exécuter pendant un bon moment!
Eh bien, vous n'avez qu'une seule variable datetime alors que l'OP a deux datetime variables et un intervalle. Pourquoi il n'y a rien dans votre solution sur l'intervalle (554 secondes) et la date de fin (vous êtes en supposant que c'est à 1 minute d'intervalle sur une seule journée)?
OriginalL'auteur Yuck
Voici un autre non-récursive, basés sur la solution, qui utilise un système de table appelée
master..spt_values
:La première SÉLECTIONNEZ génère un ensemble de lignes constitué de courts intervalles de longueur spécifiée, qui se situe dans la plage spécifiée. Si nécessaire, la deuxième SÉLECTIONNEZ ajoute un intervalle entre la première sélection du dernier intervalle de temps de la fin, et l'heure de fin spécifiée.
Le sous-ensemble de
master..spt_values
qui est particulièrement utilisé ici (et peut être utilisé dans de nombreux cas similaires) fournit une liste de nombres de 0 à 2047. Pour vous, cela signifie que vous ne serez pas en mesure d'utiliser cette solution avec celle de la table si l'intervalle initial va être divisé en plus de 2047 court(er) d'intervalle. Ensuite, vous devez penser à quelque chose comme votre propre numéro de table.Pas de problème! Je pensais que les deux termes sont interchangeables. Bien que je l'avoue, je ne peux pas comprendre pleinement toutes les subtilités de la signification du mot tally (et il en résulte que j'aurais été plus prudent dans mon précédent usages du terme de tally table). Merci beaucoup pour l'avis!
Jeff Moden est d'essayer de "réinventer" la table de nombres idée (qui ne proviennent pas de lui) en le renommant. Donc, les discussions évoluent où deux personnes sont en utilisant des termes différents, et il peut être source de confusion. La table de numéros de être utilisé pour le comptage, mais ce n'est qu'un usage très spécifique, même si c'est l'un des plus communs. De toute façon, c'est juste mon avis, totalement subjectif, mais j'essaie de tirer vers le bas la prolifération du terme "tally table" quand je pense que les gens peuvent écouter. 🙂
OriginalL'auteur Andriy M
Espère que cela aide...
OriginalL'auteur teenboy
s'il vous plaît essayez ce code:
OriginalL'auteur Max