SQL - obtener fechas a partir del mes

   
Vista:

obtener fechas a partir del mes

Publicado por Fabián (7 intervenciones) el 08/11/2011 16:21:23
Buenas tengo una consulta tengo la siguiente tabla con las siguientes columnas DiaCierre, Mes y Año, yo obtengo los meses que el usuario quiere consultar por ejemplo quiere ver los meses 10,11,12, entonces necesito obtener las fecha cierre del rango del mes 10 al mes 12, por ejemplo el mes 10 tiene como fecha cierre el 27. el mes 11 tiene como fecha cierre el 18 y el mes 12 tiene como fecha cierre el dia 18, entonces lo que tendria q devolver la consulta seria dos fechas una que diga 27-10-2010 y otra q diga 18-12-2010

tengo algo como esto:

Select DiaCierre, Mes, Año from KPI_MENSUALES where Mes in (10,11,12) and Año = 2010

eso me devuelve lo siguiente:

DiaCierre Mes Año
27 10 2010
12 11 2010
18 12 2010


Hay alguna opción de que con una consulta tal vez usando case o alguna otra cosa me devuelva los rangos de fecha es decir q me devuelva 27-10-2010 y 18-12-2010.


De antemano muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

obtener fechas a partir del mes

Publicado por leonardo_josue (877 intervenciones) el 08/11/2011 19:21:09
Hola Fabian:

El manejo de fechas varía mucho de un motor de BD a otro, por lo que deberías comenzar por decirnos con que BD estás trabajando, para poder darte una respuesta más cercana a la realidad. También sería conveniente que nos digas de qué tipo de dato son tus campos, para saber por ejemplo enero lo guardas como 1 o como 01, lo mismo para los días, si almacenas por ejemplo 8 o 08...

También deberías comentarnos si para cada mes existe solamente una fecha de cierre, con los datos que pones así podría inferirse, pero más vale que nos lo confirmes.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

obtener fechas a partir del mes

Publicado por Fabián (7 intervenciones) el 08/11/2011 20:16:00
Gracias Leo, utilizo el motor SQL2008 R2, el mes se ingresa como un entero se ingresa 1 en vez de 01, y si efectivamente solo hay un día cierre para cada mes.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

obtener fechas a partir del mes

Publicado por leonardo_josue (877 intervenciones) el 08/11/2011 20:44:47
Hola de nuevo:

Una recomendación para el futuro, cuando tengas que trabajar con fechas en cualquier BD, UTILIZA CAMPOS TIPO FECHA, para esa razón existen... manejar fechas tal como lo haces, o peor aun en campos tipo texto es un verdadero dolor de cabeza... pues tienes que garantizar que la información que almacenes en la tabla es una fecha válida, ya que nada te impide que pongas un día 34 o un mes 21, o pero aun manejar números negativos... en lugar de "facilitar" su manejo lo complica enormemente. Si aun estás a tiempo de cambiar tu modelo de BD, hazlo, si en tu aplicación necesitas separar la fecha, es más sencillo que hacerlo a la inversa, pero bueno, ese es solo mi humilde punto de vista. Volviendo a tu problema, hay varias formas para hacer lo que quieres, aunque las respuestas no son tan triviales... te dejo un script de una manera. La idea es convertir a cadena tus campos y formar una "fecha" en formato ANSI (yyyy-mm-dd) para poder convertir... la función RIGHT se utiliza para rellenar con ceros los meses de 1 cifra, sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
declare @KPI_MENSUALES table (DiaCierre int, Mes int, Año int)
 
insert into @KPI_MENSUALES  values (5, 9, 2010)
insert into @KPI_MENSUALES  values (12, 11, 2010)
insert into @KPI_MENSUALES  values (18, 12, 2010)
select
cast(
(select
cast(año as varchar(4)) + '-' +
right('00' + cast(mes AS varchar(2)), 2) + '-' +
right('00' + cast(DiaCierre AS varchar(2)), 2)
from @KPI_MENSUALES where mes = 9 and año = 2010) as datetime) rango_inicial,
cast(
(select
cast(año as varchar(4)) + '-' +
right('00' + cast(mes AS varchar(2)), 2) + '-' +
right('00' + cast(DiaCierre AS varchar(2)), 2)
from @KPI_MENSUALES where mes = 12 and año = 2010) as datetime) rango_final
 
/*
rango_inicial           rango_final
----------------------- -----------------------
2010-09-05 00:00:00.000 2010-12-18 00:00:00.000
/*


la primer fecha corresponde a un día y un mes de una cifra... el rango de fechas estaría contemplado entonces entre el mes 9 y el mes 12... los meses 10 y 11 en realidad no te sirven para nada.

Dale un vistazo para ver si te puede servir.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

obtener fechas a partir del mes

Publicado por Fabian (7 intervenciones) el 08/11/2011 22:32:46
Muchísimas gracias Leo, algo así estaba buscando, gracias también por sus consejos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar