Próbuję dowiedzieć się, jak obliczyć liczbę "wtorki" między dwiema datami w TSQL?Jak obliczyć liczbę "wtorków" między dwiema datami w TSQL?
"Wtorek" może mieć dowolną wartość.
Próbuję dowiedzieć się, jak obliczyć liczbę "wtorki" między dwiema datami w TSQL?Jak obliczyć liczbę "wtorków" między dwiema datami w TSQL?
"Wtorek" może mieć dowolną wartość.
Sprawdź to pytanie: Count work days between two dates
Istnieje kilka sposobów można wykorzystać odpowiedź na to pytanie dla twojego również.
Odpowiedzi na to będzie naprawdę trudno przekonwertować na to pytanie. Również nie są naprawdę godni wszystkich punktów, które otrzymali. Lepsze odpowiedzi na to pytanie: http://stackoverflow.com/questions/6704905/numbers-of-weekdays-in-a-date-range-in-tsql –
declare @from datetime= '9/20/2011'
declare @to datetime = '9/28/2011'
select datediff(day, -6, @to)/7-datediff(day, -5, @from)/7
+1 Działa świetnie. Jednak do tej pory nie można złamać formuły. Jest jasne, że '-6' i' -5' mogą łatwo być odpowiednio "1" i "2" lub jakikolwiek inny wtorek i odpowiednia (następna) środa. Zastanawiam się tylko, czy trafiłeś na właściwe liczby empirycznie, albo jakoś je obliczyłeś. –
@AndriyM tak, -6 i -5 dają taki sam wynik jak 1 i 2, co utrudniłoby wyjaśnienie. Osiągnąłem wynik przez obliczenie i testowanie, nie otrzymałem prawidłowego wyniku kilka pierwszych razy. –
@arjmand jeśli to rozwiązało twój problem, proszę przyjąć odpowiedź –
@ t-clausen.dk & Andrij M jak odpowiedzi na t-clausen.dks response and comments
zapytaniu wykorzystuje fakt, że 1900- 01-01 był poniedziałkiem. I 01.01.1900 to data 0.
select dateadd(day,0,0)
Drugi parametr do datediff
-function jest StartDate.
Więc porównywania „1899-12-26” z @ aktualne i „1899-12-26” jest wtorek
select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')
samo o drugim terminie, który używa ten sam fakt.
W rzeczywistości można porównać z każdą znaną we wtorek i odpowiadającą środę (która nie jest w interwale czasu, który badasz).
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]
Zasadniczo algorytm to "Wszystkie wtorki minus wszystkie środy".
Dziękuję t-clausen.dk, Uratował mnie kilka dni. Aby uzyskać żadnych wystąpień każdego dnia:
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 może oznaczać SQL Server lub Sybase - co to jest? I co próbowaliście? –