Consulta sql

15/04/2005 - 23:28 por ChevyGNL | Informe spam
Hola todos,

necesito una orientación

necesito determinar si dada la fecha "FechaReferencia" esta se encuentra
en uno de los registros de secuencia que corresponde a una fecha y
frecuencia
dados

por ejemplo
la FechaReferencia= '2009-01-01' cae en la lista de registros que arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050101' ,
'Smestral')

la FechaReferencia= '2009-01-11' no cae en la lista de registros que
arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050111' ,
'Smestral')


uno de los problemas que tengo es la generación de la lista con las
fechas...

/*

2005-01-01 00:00:00.000
2005-07-01 00:00:00.000
2006-01-01 00:00:00.000
2006-07-01 00:00:00.000
2007-01-01 00:00:00.000
2007-07-01 00:00:00.000
2008-01-01 00:00:00.000
2008-07-01 00:00:00.000
2009-01-01 00:00:00.000
2009-07-01 00:00:00.000
2010-01-01 00:00:00.000
2010-07-01 00:00:00.000
2011-01-01 00:00:00.000
.
.
*/

/*

create table #tTestfechas
( FechaIni datetime,
Frecuencia varchar(20) )

set nocount on

delete from #tTestfechas
insert into #tTestfechas values ( '20050101' , 'Mensual' )
insert into #tTestfechas values ( '20050101' , 'Semestral' )
insert into #tTestfechas values ( '20050101' , 'Trimestral' )


select * from #tTestfechas


*/

Preguntas similare

Leer las respuestas

#1 Isaias
16/04/2005 - 01:31 | Informe spam
Pues esta bastante completo, pero no entiendo que es lo que quieres resolver.
lo siento.
Respuesta Responder a este mensaje
#2 Manuel Etcheto
16/04/2005 - 01:49 | Informe spam
Hola
Si las frecuencias son siempre meses (mes, trimestre, semestre, año ...) te
puede servir algo así:
CREATE FUNCTION dbo.SecuenciaMensual
(@ref smalldatetime, @ini smalldatetime, @meses tinyint)
RETURNS bit
AS
BEGIN
DECLARE @resultado bit
SET @resultado = 0
WHILE @ini < @ref
BEGIN
If @ini < @ref
SET @ini = DATEADD(MM, @meses, @ini)
END
IF @ini = @ref
SET @resultado = 1
RETURN @resultado
END

select dbo.SecuenciaMensual('20090101', '20050101', 6) -- 1
select dbo.SecuenciaMensual('20090111', '20050101', 6) -- 0

Si puede haber semanas, días... habría que agregar un cuarto parámetro que
indique 'D' o 'M' y luego un IF
O 2 funciones separadas

Suerte
Manuel

ChevyGNL escribió en el mensaje de noticias

Hola todos,

necesito una orientación

necesito determinar si dada la fecha "FechaReferencia" esta se encuentra
en uno de los registros de secuencia que corresponde a una fecha y
frecuencia
dados

por ejemplo
la FechaReferencia= '2009-01-01' cae en la lista de registros que arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050101' ,
'Smestral')

la FechaReferencia= '2009-01-11' no cae en la lista de registros que
arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050111' ,
'Smestral')


uno de los problemas que tengo es la generación de la lista con las
fechas...

/*

2005-01-01 00:00:00.000
2005-07-01 00:00:00.000
2006-01-01 00:00:00.000
2006-07-01 00:00:00.000
2007-01-01 00:00:00.000
2007-07-01 00:00:00.000
2008-01-01 00:00:00.000
2008-07-01 00:00:00.000
2009-01-01 00:00:00.000
2009-07-01 00:00:00.000
2010-01-01 00:00:00.000
2010-07-01 00:00:00.000
2011-01-01 00:00:00.000
.
.
*/

/*

create table #tTestfechas
( FechaIni datetime,
Frecuencia varchar(20) )

set nocount on

delete from #tTestfechas
insert into #tTestfechas values ( '20050101' , 'Mensual' )
insert into #tTestfechas values ( '20050101' , 'Semestral' )
insert into #tTestfechas values ( '20050101' , 'Trimestral' )


select * from #tTestfechas


*/


Respuesta Responder a este mensaje
#3 Miguel Egea
16/04/2005 - 13:06 | Informe spam
Usa la funcion datediff y dateadd para eso
declare @desde datetime
declare @destino datetime
set @desde='20010101'
set @destino='20090101'
if dateadd(wk,datediff(wk,@desde,@destino),@desde)=@destino
print 'si está en freuencia semanal'
esle
print 'no está en frecuencia semanal'

Puedes ver que el día 20090105 si está en frecuencia semanal.


Saludos
Miguel Egea


"ChevyGNL" escribió en el mensaje
news:
Hola todos,

necesito una orientación

necesito determinar si dada la fecha "FechaReferencia" esta se encuentra
en uno de los registros de secuencia que corresponde a una fecha y
frecuencia
dados

por ejemplo
la FechaReferencia= '2009-01-01' cae en la lista de registros que arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050101' ,
'Smestral')

la FechaReferencia= '2009-01-11' no cae en la lista de registros que
arranca
end '20010101' con frecuencia "Semestral"

f(fecharefencia,fechaArranque,frecuencia) = f('20090101' , '20050111' ,
'Smestral')


uno de los problemas que tengo es la generación de la lista con las
fechas...

/*

2005-01-01 00:00:00.000
2005-07-01 00:00:00.000
2006-01-01 00:00:00.000
2006-07-01 00:00:00.000
2007-01-01 00:00:00.000
2007-07-01 00:00:00.000
2008-01-01 00:00:00.000
2008-07-01 00:00:00.000
2009-01-01 00:00:00.000
2009-07-01 00:00:00.000
2010-01-01 00:00:00.000
2010-07-01 00:00:00.000
2011-01-01 00:00:00.000
.
.
*/

/*

create table #tTestfechas
( FechaIni datetime,
Frecuencia varchar(20) )

set nocount on

delete from #tTestfechas
insert into #tTestfechas values ( '20050101' , 'Mensual' )
insert into #tTestfechas values ( '20050101' , 'Semestral' )
insert into #tTestfechas values ( '20050101' , 'Trimestral' )


select * from #tTestfechas


*/


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida