FoxPro/Visual FoxPro - Cambiar el mes de los registros de una tabla

 
Vista:
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 12/05/2017 06:14:46
Hola comunidad LWP.. necesito ayuda con las instrucciones para cambiar el mes de de los registros de una tabla..
La información se guarda a diario y por día se introducen muchos registro.. necesito copiar la tabla del mes de marzo a una tabla abril y cambiar su respectiva fecha ejemplo: de marzo 01/03/2017 a abril 01/04/2017 (todo el mes) los campos están en formato fecha.
Desde ya gracias por lo que me puedan colaborar.
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
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Leonardo Daniel A. (497 intervenciones) el 12/05/2017 06:32:19
1
2
3
4
5
6
7
8
9
10
set date to dmy
set century on
set confirm off
 
use tabla
 
copy to tabla_nueva with cdx
 
use tabla_nueva
replace all fecha with ctod("01/04/2017")
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
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 12/05/2017 06:47:26
Gracias por la respuesta.. pero necesito hacerlo con todos los días del mes y tener en cuenta que si voy a cambiar un mes de 31 días a otro de 30 días no me vote error en los días 31 ejemplo tengo el mes de marzo de 30 días y lo voy a cambiar a abril de 31 días
31/03/2017 y pasar lo al mes siguiente 31/04/2017 me va a dar error por que abril solo trae 30 días..
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
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Santiago (551 intervenciones) el 12/05/2017 12:10:51
Replace all fecha with gomonth(fecha,1)
Suerte.
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
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 12/05/2017 23:01:59
Gracias por las respuestas.. la del comando gomonth() no la entendía muy bien pero ya me la explicaron..
y por si acaso publico otra instrucción para cambio de año:
repla all fecha with ctod(padl(alltrim(str(day(fecha))),2,'0')+'/'+str(month(fecha),2)+'/2017')
donde fecha es el campo de la tabla a cambiar y le puse "/2017" por que el separador es /.. si el separador es otro poner el que necesite (12/05/2017)
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Fidel José (657 intervenciones) el 13/05/2017 00:45:48
En lugar de todo ese bodrio de ctod / padl / alltrim, etc, donde todo depende de la configuración del formato fecha, tienes que utilizar algo así
1
2
3
4
5
ln = 1
SELECT TABLA
SCAN
        REPLACE FECHA WITH  DATE( YEAR(fecha)+ ln , MONTH(Fecha) , DAY(fecha) )
ENDSCAN

O Si quieres para un año fijo determinado:
1
2
3
4
5
lnAnio = 2017
SELECT TABLA
SCAN
        REPLACE FECHA WITH  DATE( lnAnio , MONTH(Fecha) , DAY(fecha) )
ENDSCAN
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
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 13/05/2017 05:31:23
gracias por os aportes..
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
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Santiago (551 intervenciones) el 13/05/2017 06:12:11
Para el año lo más fácil es gomonth(fecha,12)
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
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 13/05/2017 21:38:26
Gracias por todas las opciones... una cosa mas.. si necesitara borrar registros de un mes especifico como seria la instrucción que debería usar???
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Fidel José (657 intervenciones) el 14/05/2017 13:50:24
Así como lo pides te borrará el mismo mes con independencia del año. POr ejemplo, borrar todos los meses "mayo" de todos los años que encuentre:
1
2
3
4
SELECT TABLA
SCAN FOR MONTH(FECHA) = 5
         DELETE
ENDSCAN

Si, en cambio, quieres quitar solamente el mes de mayo de 2016:
1
2
3
4
SELECT TABLA
SCAN FOR YEAR(FECHA)=2016 AND MONTH(FECHA) = 5
           DELETE
ENDSCAN

Este link te resuelve cualquier duda que tengas sobre manejo de fechas
https://comunidadvfp.blogspot.com/2014/09/trabajar-con-fechas-y-horas-en-visual.html
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
Imágen de perfil de Victor Hugo
Val: 22
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Victor Hugo (27 intervenciones) el 14/05/2017 17:28:12
Excelente.. muchas gracias por el aporte...
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

Cambiar el mes de los registros de una tabla

Publicado por Oscar (1 intervención) el 15/05/2017 10:44:27
Para el caso de cambiar una fecha al siguiente mes , yo tal vez pondría algo así

scan
Repl fecha with fecha+30
Endscan
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
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Cambiar el mes de los registros de una tabla

Publicado por Fidel José (657 intervenciones) el 15/05/2017 13:34:29
Oscar:
Tu respuesta es incorrecta.
Los meses del calendario juliano no son de 30 días, salvo abril, junio, septiembre y noviembre. Por lo que tu fórmula no solo alterará el mes, sino también el día. Para el caso de Enero 30 y 31, también te salteará un mes (1 y 2 de marzo, respectivamente).

Para VFP 9, lo que se debe usar es GOMONTH(fecha,nMeses).
Para versiones anteriores que no tienen la función GOMONTH(), el cálculo requiere un pequeño procedimiento, que podría ser algo 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
25
26
27
28
29
30
31
32
33
PROCEDURE My_GoMonth
*---------------------------------
LPARAMETERS tdFecha,tnMeses
 
LOCAL lnDia,lnMes,lnAno,;
	ldNewFecha,;
	lnDiasREsta,;
	lnMeses_Add,;
	lnAnos_Add
 
 
tnMeses = EVL(tnMeses,0)
tdFecha = EVL(tdFecha,DATE())
ldNewFecha = {}
lnDiasResta = 0
 
lnMeses_Add = tnMeses - INT(tnMeses/12) * 12
lnAnos_Add = INT(tnMeses/12)
 
DO WHILE EMPTY(ldNewFecha)
	lnDia = DAY(tdFecha) - m.lnDiasResta
	lnMes = MONTH(tdFecha) + m.lnMeses_add
	lnAno = YEAR(tdFecha) + m.lnAnos_Add
 
	IF lnMes <= 0
		lnMes = MONTH(tdfecha) + m.lnMeses_Add + 12
		lnAno = lnAno - 1
	ENDIF
	ldNewFecha = DATE(m.lnAno,lnMes,lnDia)
	lnDiasResta = m.lnDiasResta + 1
ENDDO
 
RETURN m.ldNewFecha
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