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

#6 Alejandro Mesa
10/06/2008 - 23:43 | Informe spam
David,

Puedes usar una fecha de referencia que sea Viernes y otra que sea Sabado,
por ejemplo 4 y 5.

select datename(weekday, 4), datename(weekday, 5)
go

Luego calculas el ultimo viernes previo a la fecha final que usas en el
rango. Para esto usas la fecha de referencia de el viernes.

DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME
DECLARE @sabado_referencia DATETIME

SET @viernes_referencia = 4

SET @sd = '20080609'
SET @ed = '20080611'

SELECT
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed AS

Asi que si ese viernes previo esta entre las cuotas de el rango, entonces
hay un viernes en el rango. Lo mismo puedes hacer para el sabado. Aqui tienes
un ejemplo.


DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME
DECLARE @sabado_referencia DATETIME

SET @viernes_referencia = 4
SET @sabado_referencia = 5

SET @sd = '20080609'
SET @ed = '20080611'

SELECT 1
WHERE
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed
OR DATEADD(DAY, DATEDIFF(DAY, @sabado_referencia, @ed) / 7 * 7,
@sabado_referencia) BETWEEN @sd AND @ed

SET @sd = '20080609'
SET @ed = '20080615'

SELECT 1
WHERE
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed
OR DATEADD(DAY, DATEDIFF(DAY, @sabado_referencia, @ed) / 7 * 7,
@sabado_referencia) BETWEEN @sd AND @ed
GO

Se que toma tiempo digerir la formula pero se que lo lograras. Si no das con
la formula, dejanos saber y posteare una pequenia explicacion.


AMB



"David" wrote:

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




Respuesta Responder a este mensaje
#7 Alejandro Mesa
10/06/2008 - 23:55 | Informe spam
Correccion:

Luego calculas el ultimo viernes previo a la fecha final que usas en el
rango. Para esto usas la fecha de referencia de el viernes.

DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME
DECLARE @sabado_referencia DATETIME

SET @viernes_referencia = 4

SET @sd = '20080609'
SET @ed = '20080611'

SELECT
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed AS




Se me fue con copy and paste, debio ser:

DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME

SET @viernes_referencia = 4

SET @sd = '20080609'
SET @ed = '20080611'

SELECT
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia)
GO


AMB



"Alejandro Mesa" wrote:

David,

Puedes usar una fecha de referencia que sea Viernes y otra que sea Sabado,
por ejemplo 4 y 5.

select datename(weekday, 4), datename(weekday, 5)
go

Luego calculas el ultimo viernes previo a la fecha final que usas en el
rango. Para esto usas la fecha de referencia de el viernes.

DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME
DECLARE @sabado_referencia DATETIME

SET @viernes_referencia = 4

SET @sd = '20080609'
SET @ed = '20080611'

SELECT
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed AS

Asi que si ese viernes previo esta entre las cuotas de el rango, entonces
hay un viernes en el rango. Lo mismo puedes hacer para el sabado. Aqui tienes
un ejemplo.


DECLARE @sd DATETIME
DECLARE @ed DATETIME

DECLARE @viernes_referencia DATETIME
DECLARE @sabado_referencia DATETIME

SET @viernes_referencia = 4
SET @sabado_referencia = 5

SET @sd = '20080609'
SET @ed = '20080611'

SELECT 1
WHERE
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed
OR DATEADD(DAY, DATEDIFF(DAY, @sabado_referencia, @ed) / 7 * 7,
@sabado_referencia) BETWEEN @sd AND @ed

SET @sd = '20080609'
SET @ed = '20080615'

SELECT 1
WHERE
DATEADD(DAY, DATEDIFF(DAY, @viernes_referencia, @ed) / 7 * 7,
@viernes_referencia) BETWEEN @sd AND @ed
OR DATEADD(DAY, DATEDIFF(DAY, @sabado_referencia, @ed) / 7 * 7,
@sabado_referencia) BETWEEN @sd AND @ed
GO

Se que toma tiempo digerir la formula pero se que lo lograras. Si no das con
la formula, dejanos saber y posteare una pequenia explicacion.


AMB



"David" wrote:

> 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
>
>
>
>
Respuesta Responder a este mensaje
#8 David
11/06/2008 - 00:04 | Informe spam
Toma ya !!!, (menuda consulta SQL), ahora mismo son las 0:00 en ESPAÑA, hoy
vuelta al trabajo (a las 6:30 suena el despertador) y la propuesta tiene
"MIGA", mañana lo miro con detenimiento y os comento.

(digestión pesada me espera, muy pesada)

Lo dicho gracias.
Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
11/06/2008 - 00:23 | Informe spam
Hola David,

On 10 jun, 19:13, "David" wrote:
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




Prueba esto:

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

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.

Saludos,
Carlos
Respuesta Responder a este mensaje
#10 David
11/06/2008 - 11:35 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida