FoxPro/Visual FoxPro - Tranformar caracter a fecha

 
Vista:

Tranformar caracter a fecha

Publicado por Leobardo hernandez (2 intervenciones) el 28/07/2020 18:22:23
Hola me encuentro trabajando en una base de datos y me lanzan la fecha de emisión pero es tipo caracter (20200512) donde todo viene junto y me gustaria convertir esa información en tipo fecha. Espero me puedan ayudar, saludos
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

Tranformar caracter a fecha

Publicado por jose camilo (780 intervenciones) el 29/07/2020 04:57:10
revisa la funcion substring
eso te ayudara,
1
2
3
4
set date french
aa = '20200512'
set centu on
?ctod(substr(aa,7,2)+'/'+substr(aa,5,2)+'/'+substr(aa,1,4))
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

Tranformar caracter a fecha

Publicado por Leobardo hernandez (2 intervenciones) el 29/07/2020 17:14:08
Hola

Ya lo intente, pero sigue sin mostrarme nada, el programa parece que hace la sustitución en la columna pero no me imprime nada. Tengo declarada la columna que quiero sustituir (emision) como tipo date y de donde estoy sacando la fecha (fec_emi) es tipo caracter. hace disque la transformación pero no me muestra nada.

1
REPLACE ALL emision WITH ctod(ALLTRIM(substr(FEC_EMI,7,2))+'/'+ALLTRIM(substr(FEC_EMI,5,2))+'/'+ALLTRIM(substr(FEC_EMI,1,4)))

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
sin imagen de perfil
Val: 1.393
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Tranformar caracter a fecha

Publicado por Fidel José (642 intervenciones) el 29/07/2020 21:47:40
Puedes utilizar la siguiente rutina para no depender de la configuración de SET DATE

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
PROCEDURE Lit_to_Date
*------------------------------------------------------------------
* Convierte, una expresión Date Literal en un Valor Date
* tcDate (char,date,datetime,numeric) * 2020-07-28T16:49:32
* tnFlag
*	1 - AAAAMMDD	(Default) AAAA/MM/DD, AAAA-MM-DD
*	2 - DDMMAAAA			  DD/MM/AAAA, DD-MM-AAAA
*	3 - MMDDAAAA			  MM/DD/AAAA, MM-DD-AAAA
*	4 - MMAAAADD
* ------------------------------------------------------------------
LPARAMETERS tcDate,tnFlag
 
LOCAL ldReturn,;
	ln,;
	lcVartype,;
	loex as Exception
 
LOCAL ARRAY laDate(1)
 
TRY
	ldReturn = {}
 
	DO WHILE .t.
 
		DO CASE
			CASE VARTYPE(m.tcDate) = "C"
				tcDate = ALLTRIM(tcDate)
			CASE VARTYPE(m.tcDate) = "N"
				tcDate = LTRIM(STR(m.tcDate,8,0))
 
			CASE VARTYPE(m.tcDate) $ "DT"
				tcDate = DTOS(m.tcDate)
 
				* Sobreescribe el parámetro tnFlag
				tnFlag = 1
 
			OTHERWISE
				tcDate = ""
		ENDCASE
 
		IF VARTYPE(tcDate)#"C"
			tcDate = ""
		ENDIF
		* Se elimina cualquier caracter no numeric que tenga tcDate
		* tomando los 8 primeros caracteres de la izquierda
		tcDate = LEFT(CHRTRAN(m.tcDate,CHRTRAN(m.tcDate,"1234567890",""),""),8)
 
		IF LEN(m.tcDate) # 8
			EXIT
		ENDIF
 
		* Valida parámetro tnFlag
		lcVartype = VARTYPE(m.tnFlag)
		DO CASE
			CASE m.lcVartype = "N"
				tnFlag = ABS(m.tnFlag)
			CASE m.lcVartype = "C"
				tnFlag = VAL(CHRTRAN(m.tnFlag,CHRTRAN(m.tnFlag,"1234567890",""),""))
			OTHERWISE
				tnFlag = 1
		ENDCASE
 
		IF EMPTY(m.tnFlag) OR !BETWEEN(m.tnFlag,0,4)
			tnFlag = 1
		ENDIF
 
		DO CASE
			CASE m.tnFlag = 1
				*	1 - AAAAMMDD
				tcDate = RIGHT(m.tcDate,2)+CHR(47);
					+ SUBSTR(m.tcDate,5,2)+CHR(47);
					+ LEFT(m.tcDate,4)
			CASE m.tnFlag = 2
				*	2 - DDMMAAAA
				tcDate = LEFT(m.tcDate,2)+CHR(47);
					+ SUBSTR(m.tcDate,3,2)+CHR(47);
					+ RIGHT(m.tcDate,4)
			CASE m.TnFlag = 3
				*	3 - MMDDAAAA
				tcDate = SUBSTR(m.tcDate,3,2)+CHR(47) ;
					+ LEFT(m.tcDate,2)+CHR(47);
					+ RIGHT(m.tcDate,4)
			CASE m.tnFlag = 4
				*	4 - MMAAAADD
				tcDate = RIGHT(m.tcDate,2)+CHR(47);
					+ LEFT(m.tcDate,2)+CHR(47);
					+ SUBSTR(m.tcDate,3,4)
		ENDCASE
 
		ln = ALINES(laDate,m.tcDate,1,CHR(47))
		IF ln = 3
			ldReturn = DATE(VAL(laDate[3]),VAL(laDate[2]),VAL(laDate[1]))
		ENDIF
		EXIT
	ENDDO
 
CATCH TO loex
 
	ldReturn = {}
FINALLY
 
ENDTRY
 
RETURN ldReturn
ENDPROC

* Ejemplo de uso
SELECT (lcCursor)
SCAN
REPLACE emision WITH Lit_To_Date(fec_emi,1)
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: 25
Ha disminuido 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Tranformar caracter a fecha

Publicado por Rodolfo (8 intervenciones) el 06/08/2020 06:02:48
Asumo que estás usando Visual FoxPro.
Te sugiero primero verificar el formato de fecha de tu instalación de Visual FoxPro con el comando DISPLAY STATUS.
Si no es la correcta, modifica por medio del menu "Herramientas", "Opciones" de acuerdo a las imágenes adjuntas, le pones "Establecer como predeterminado" y aceptar.

Luego verifica en pantalla si hace o no la transformación correctamente:
fec_emi = "20200804"
? CTOD(SUBSTR(fec_emi,7,2)+'/'+SUBSTR(fec_emi,5,2)+'/'+SUBSTR(fec_emi,1,4))

Imagen1
Imagen2
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