J'essaie de déterminer comment calculer le nombre de "mardi" entre deux dates de TSQL? P>
"mardi" pourrait être n'importe quelle valeur. P>
4 Réponses :
Consultez cette question: Compter les jours de travail entre deux dates p>
Il y a quelques façons de tirer parti de la réponse à cette question pour la vôtre. P>
Les réponses pour cela seront vraiment difficiles à convertir à cette question. En outre, ils ne sont pas vraiment dignes de tous les points qu'ils ont reçus. Meilleures réponses pour cette question ici: Stackoverflow.com/Questtions/6704905/...
declare @from datetime= '9/20/2011' declare @to datetime = '9/28/2011' select datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 find the week of the first monday before the tuesday in @from. find the week of the first monday after @to subtract the weeks
+1 fonctionne bien. Je ne peux pas craquer la formule jusqu'à présent, cependant. Il est clair que -6 code> et -5 code> pourrait facilement être 1 code> et 2 code> respectivement ou tout autre mardi et le mot correspondant (ultérieur) mercredi. Ce que je me demande, c'est que vous ayez eu des chiffres de droite empiriquement ou que vous les avez des calculés en quelque sorte.
@Andriym Oui, -6 et -5 rendement le même résultat que 1 et 2 le feraient, cela rendrait cela plus difficile à expliquer cependant. J'ai atteint le résultat en calculant et en testant, n'a pas reçu le résultat correct des premières fois.
@arjmand Si cela résolvait votre problème, veuillez accepter la réponse
Il y a une bonne chance @arjmand au sujet de votre commentaire, car j'étais. :) Quoi qu'il en soit, il / elle n'est pas l'auteur de la question et ne peut donc pas accepter votre réponse. Et pendant que je suis ici, j'aimerais dire que je suis déconcerté par la stupidité de mon ancien commentaire. Je veux dire que je suis consterné sur la façon dont je me trompe -6 code> et -5 code> à réellement i> signifie mardi et mercredi, car ils ne sont vraiment pas dates (C'était probablement ce que je les ai confondus) mais le nombre de jours pour soustraire. Quoi qu'il en soit, votre réponse est toujours géniale, acclamations!
@Andriym c'est une syntaxe délicate. J'ai remarqué que vous aimez aussi bien. Triste de voir à quel point ces algoritmes sont inconnus.
@ t-clausen.dk & andriy m comme réponse à T-CLAUSEN.DKS RÉPONSE ET COMMENTAIRES
La requête utilise le fait que 1900-01-01 était un lundi. Et 1900-01-01 est la date 0. p>
Le deuxième paramètre dans le Vous comparez donc "1899-12-26" avec votre @ à date et "1899-12-26" est un mardi p> Même chose à propos de la deuxième date qui utilise le même fait. p> En fait, vous pouvez comparer avec tout mardi connu et mercredi correspondant (ce n'est pas à l'intervalle de date que vous enquêtez). P> Sélectionnez Daaddd (jour, 0,0) CODE> P> Daturadiff code> -fonction est le startdate. p> Sélectionnez DATENAME (DW, DADEADDD (JOUR, 0, -6)), DATNAME (DW, '1899-12-26') CODE> P> declare @from datetime= '2011-09-19'
declare @to datetime = '2011-10-15'
select datediff(day, '2011-09-13', @to)/7-datediff(day, '2011-09-14', @from)/7 as [works]
,datediff(day, '2011-10-18', @to)/7-datediff(day, '2011-10-19', @from)/7 as [works too]
,datediff(day, '2011-09-27', @to)/7-datediff(day, '2011-09-28', @from)/7 as [dont work]
merci t-clausen.dk m'a sauvé quelques jours. Pour obtenir des instances de chaque jour:
declare @from datetime= '3/1/2013' declare @to datetime = '3/31/2013' select datediff(day, -7, @to)/7-datediff(day, -6, @from)/7 AS MON, datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 AS TUE, datediff(day, -5, @to)/7-datediff(day, -4, @from)/7 AS WED, datediff(day, -4, @to)/7-datediff(day, -3, @from)/7 AS THU, datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 AS FRI, datediff(day, -2, @to)/7-datediff(day, -1, @from)/7 AS SAT, datediff(day, -1, @to)/7-datediff(day, 0, @from)/7 AS SUN
TSQL peut signifier SQL Server ou Sybase - qui est-ce? Et qu'avez-vous essayé?