Estoy tratando de averiguar cómo calcular el número de "martes" entre dos fechas en TSQL?¿Cómo se calcula el número de "martes" entre dos fechas en TSQL?
"Tuesday" podría tener algún valor.
Estoy tratando de averiguar cómo calcular el número de "martes" entre dos fechas en TSQL?¿Cómo se calcula el número de "martes" entre dos fechas en TSQL?
"Tuesday" podría tener algún valor.
Salida esta pregunta: Count work days between two dates
Hay algunas maneras que usted puede aprovechar la respuesta a esa pregunta por la tuya también.
Las respuestas para eso serán realmente difíciles de convertir a esta pregunta. Además, no son realmente dignos de todos los puntos que recibieron. Mejores respuestas para esa pregunta aquí: 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 Funciona muy bien. Sin embargo, no se puede descifrar la fórmula hasta ahora. Está claro que '-6' y' -5' podrían ser fácilmente '1' y' 2' respectivamente o cualquier otro martes y el miércoles correspondiente (subsiguiente). Lo que me pregunto es si llegó a las cifras correctas solo empíricamente o de alguna manera las calculó. –
@AndriyM sí, -6 y -5 producen el mismo resultado que 1 y 2, pero sería más difícil de explicar. Llegué al resultado calculando y probando, no obtuve el resultado correcto las primeras veces. –
@arjmand si esto resolvió su problema, por favor acepte la respuesta –
@ t-clausen.dk & Andriy M como respuesta a t-clausen.dks response and comments
la consulta utiliza el hecho de que 1900- 01-01 fue un lunes. Y es la fecha 1900-01-01 0.
select dateadd(day,0,0)
El segundo parámetro en el datediff
-función es startdate.
Así que usted está comparando '26/12/1899' con su @ actualizada y '26/12/1899' es un martes
select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')
mismo de la segunda fecha que utiliza el mismo hecho
De hecho, puede comparar con cualquier martes conocido y miércoles correspondiente (que no está en el intervalo de fechas que está investigando).
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]
Básicamente el algoritmo es "Todos los martes menos todos los miércoles".
Gracias t-clausen.dk, Me salvó unos días. Para obtener ninguna de las instancias de cada día:
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 puede significar SQL Server o Sybase, ¿cuál es? ¿Y qué has intentado? –