FoxPro/Visual FoxPro - Problema con fecha

   
Vista:

Problema con fecha

Publicado por Marcelo (69 intervenciones) el 10/10/2012 23:39:41
Hola Amigos...

Tengo el siguiente problema...

necesito consultar una tabla por un periodo de tiempo el cual debe ser mes-año. Para esto tengo un formulario con 4 combobox...dos para mes-año inicial y los otros dos para el mes-año final.
Hasta aqui todo bien....mi problema viene cuando trato de poner este parametro en el select...como pongo esto?...trate de hacerlo asi ...

between (year(fecha), mi_año1, mi_año2) .and. between(month(fecha),mes1,mes2)...pero no arroja los datos esperados.

Lo que necesito es que arroje todos los dias del mes inicial hasta el ultimo dia del mes final...se entiende?

Osea...si los parametros fueran junio - 2011 hast Agosto - 2012...en la consulta debiera considerar todos los dias de junio, todos los de Julio y asi hasta llegar al ultimo dia de agosto de 2012

Gracias de antemano.
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

Problema con fecha

Publicado por Fidel (320 intervenciones) el 11/10/2012 02:11:05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
*******************************************************
* Obtenemos los dos extremos del rango
*******************************************************
* Definir
nAno1: (Numéric)  año del rango inicial
nMes1: (Numéric)  mes del rango inicial
 
ncAno2: (num/char) año del rango final
ncMes2: (Num/char) mes del rango final
 
* Valores del Rango de fechas para SELECT SQL
dia1=Date(nAno1,nMes1,1)	&& Primer día del rango inicial
dia2=FindeMes(ncAno2,ncMes2)	&& Ultimo día del rango final
 
* Bloque de Meses Completos
*****************************
* Con función Between()
SELECT * FROM MiTabla ;
	WHERE BETWEEN(fecha,dia1,dia2) ;
	into CURSOR MiCursor
 
* Alternativamente
SELECT * FROM MiTabla ;
	WHERE Fecha BETWEEN dia1 AND dia2 ;
	INTO CURSOR MiCursor
 
*****************************
Function Findemes(xMes,xAno)
*****************************
* Determina y devuelve el último día de un mes cualquiera (Fecha)
* xMes y xAno pueden ser Numeric ó Character
LOCAL Bi,lBisiesto,ldLast
if Vartype(xmes)="C"
	xmes=val(xmes)
endif
if xmes=0
	xmes=month(date())
endif
if vartype(xano)="C"
	xano=Val(xano)
endif
if xano=0
	xano=year(date())
endif
if xano=2000
	lBisiesto=.t.
else
	lBisiesto=iif(Mod(xAno,4)=0,iif(Mod(xano,25)=0,.f.,.t.),.f.)
ENDIF
DO case
	CASE xmes=2
		ldLast=IIF(lBisiesto,29,28)
	CASE INLIST(xmes,1,3,5,7,8,10,12)
		ldLast=31
	OTHERWISE
		ldLast=30
ENDCASE
RETURN DATE(xAno,xMes,ldLast)
ENDFUNC
******************************
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

Problema con fecha

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 17/10/2012 17:24:46
No hay que programar tanto. Con una sentencia SELECT lo tienes hecho.

SELECT * FROM MiTabla ;
WHERE BETWEEN( fecha, ;
DATE( anhoinicio, mesinicio, 1), ;
DATE( anhofinal, mesfinal+1,1)-1)
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

Problema con fecha

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 17/10/2012 18:42:23
Corrijo, corrijo, se me escapaba que fuese diciembre.

Queda así:

SELECT * FROM MiTabla ;
WHERE BETWEEN( fecha, ;
DATE( anhoinicio, mesinicio, 1), ;
DATE( IIF(mesfinal=12,anhofinal+1,anhofinal), IIF(mesfinal=12,1,mesfinal+1),1)-1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema con fecha

Publicado por Marcelo (69 intervenciones) el 17/10/2012 18:52:59
Gracias a todos...problema solucionado.
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