No me gustan los lunes, me gustan los viernes y sábados.

10/06/2008 - 19:13 por David | Informe spam
Microsoft SQL Server 2000

Muy buenas es posible realizar esta consulta


Escenario:
-
Dadas dos fechas:

FechaInicial < FechaFinal

¿Cómo saber si dado un intérvalo de fechas, alguna fecha es viernes o
sábado?

¿Es posible construir la condición WHERE?

Obviemos el SELECT y el FROM, ¿cómo construir la condición WHERE?

WHERE Periodo_Fechas Algún día es Viernes ó Sabado

NO tengo ni idea, ¿alguna ayuda? -> realmente alguna solución :-(((

En fin mil gracias de antemano

Preguntas similare

Leer las respuestas

#11 Maxi Accotto
12/06/2008 - 02:10 | Informe spam
Hola, proba la performance de esa query, es simple, compacta pero muy mala
en performance. No hace uso de condiciones SARG


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"David" escribió en el mensaje de
noticias:
where
(datepart(dw,FechaInicial)+@@datefirst)%7 in (0,6) or
(datepart(dw,FechaFinal)+@@datefirst)%7 in (0,6) or
datediff(dd,FechaInicial,FechaFinal) > 4



PERFECTO !!!

Que viene a decir tanto como:
FechaInicial es viernes o sábado
O
FechaFinal es viernes o sábado
O
la diferencia entre las dos fechas es de mas de 4 días

M A R A V I L L O S O, simple, compacto, claro,

Muchísimas gracias a por la ayuda.

Nota: esta consulta es INMEDIATA, no se demora nada, en contra de mi
propuesta que si tardaba unos segundos (con una tabla de apenas 50
registros):

WHERE

(6 BETWEEN DATEPART(dw, @FechaInicio) AND DATEPART(dw, @FechaFin))

OR

(7 BETWEEN DATEPART(dw, @FechaInicio) AND DATEPART(dw, @FechaFin))




Respuesta Responder a este mensaje
#12 Carlos M. Calvelo
12/06/2008 - 03:49 | Informe spam
On 12 jun, 02:10, "Maxi Accotto"
wrote:
Hola, proba la performance de esa query, es simple, compacta pero muy mala
en performance. No hace uso de condiciones SARG




Pues mira tu que por haber reaccionado tu acabo de darme cuenta
de que, por muy 'perfecta' y 'maravillosa' que le ha parecido a
David, la consulta no funciona bien en todos los casos.
Por muy rápida o lenta que sea.

Tu siempre con las prioridades al revés. Primero hay que hacer
funcionar las cosas y después preocuparse de la eficiencia.
Una vez más se te ve el plumero. :-)
Respuesta Responder a este mensaje
#13 Carlos M. Calvelo
12/06/2008 - 04:04 | Informe spam
Hola David,

On 11 jun, 11:35, "David" wrote:
where
(datepart(dw,FechaInicial)+@@datefirst)%7 in (0,6) or
(datepart(dw,FechaFinal)+@@datefirst)%7 in (0,6) or
datediff(dd,FechaInicial,FechaFinal) > 4

PERFECTO !!!

Que viene a decir tanto como:
FechaInicial es viernes o sábado
O
FechaFinal es viernes o sábado
O
la diferencia entre las dos fechas es de mas de 4 días

M A R A V I L L O S O, simple, compacto, claro,




Pues no es tan 'perfecto' o 'maravilloso'. Al haber
reaccionado Maxi me dí cuenta de que si tienes un
período de menos de 6 días con un viernes y un sábado
en medio, no funciona. Por ejemplo del 12 al 15 de junio.

Aquí te dejo otra versión:

where
datediff(dd,FechaInicial,FechaFinal) > 4 or
(datepart(dw,FechaInicial)+@@datefirst)%7 >
(datepart(dw,FechaFinal)+@@datefirst)%7 or
(datepart(dw,FechaInicial)+@@datefirst)%7 = 0 or
(datepart(dw,FechaFinal)+@@datefirst)%7 = 6

Y no te olvides esta vez de probarla para todos los casos
distintos que te puedas imaginar. :-)

Cuando la tengas 'aprobada' se pasa Maxi por aquí y te la
hace 'SARG compatible'. Vas a ver tu como marcha la cosa! :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
#14 David
12/06/2008 - 10:27 | Informe spam
Uhhhh!!, gracias, lo voy a mirar !!!
Respuesta Responder a este mensaje
#15 David
14/06/2008 - 00:59 | Informe spam
Microsoft SQL Server 200


Muy buenas, llevo horas y ya ha pasado el viernes y estamos a sábado (que
pesadilla)

¿Cómo insertar fechas que sean VIERNES o SÁBADOS, dado un periodo definido
por FechaInicial y FechaFinal?

Dadas dos fechas: FechaInicio y FechaFinal que definen un periodo insertas
las fechas que sean Viernes o Sábados



INSERT INTO festivos

(fecha)

VALUES

NI PUTA IDEA

where
datediff(dd,FechaInicial,FechaFinal) > 4 or
(datepart(dw,FechaInicial)+@@datefirst)%7 >
(datepart(dw,FechaFinal)+@@datefirst)%7 or
(datepart(dw,FechaInicial)+@@datefirst)%7 = 0 or
(datepart(dw,FechaFinal)+@@datefirst)%7 = 6

Reconozco que no se por donde tirar, la condición de VIERNES o SÁBADO está
ahí pero ¿Cómo insertar las puñeteras fechas?

En fin cualquier aportación será bienvenida.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida