Hola Juan
Pues es verdad, tienes razon el campo de tipo timestamp es com tu dices un
alfabetico formado por fecha + hora + milisegindos, en las DDS del fichero en
question
llamaron al campo que yo quiero tratar timestamp i eso me despistó.
Ya lo he comprobado con registros recien grabados en el fichero y el número que
se guarda en ese campo debe ser el resultado de convertir la fecha y hora en
milisegundos
transcurridos desde el 01/01/1970
De hecho:
SELECT timestamp (TIMESTAMP('1970-01-01-00.00.00.000000') +
(myfield/1000) seconds) from myfile where myfield <> 0 order by
myfield desc
Me devuelve esto:
Situar en línea . . . . . .
....+....1....+....2....+.
TIMESTAMP
2010-06-15-16.32.20.000000
2010-06-15-16.29.05.000000
2010-06-15-16.19.04.000000
2010-06-15-16.03.46.000000
2010-06-15-16.02.40.000000
2010-06-15-16.02.23.000000
2010-06-15-16.01.22.000000
2010-06-15-15.52.41.000000
2010-06-15-15.51.42.000000
2010-06-15-15.50.32.000000
2010-06-15-15.49.44.000000
2010-06-15-15.49.17.000000
2010-06-15-15.48.55.000000
2010-06-15-15.47.36.000000
2010-06-15-15.45.14.000000
2010-06-15-15.32.46.000000
2010-06-15-15.30.49.000000
2010-06-15-15.27.42.000000
Muchas gracias por tu ayuda tambien.
Saludos
J.Sanchez
----- Original Message -----
From: Juan Bernabe Estrada Morales
To: forum.help400
Sent: Tuesday, June 15, 2010 5:33 PM
Subject: Re: En SQL convertir a fecha + hora un campo TIMESAMTP
Que bueno que Alex te dio la solucion, y solo con afan de aclarar:
Tengo entendido que un campo timestamp contiene la fecha, la hora y segundos,
por lo tanto se puede extraer cada una de las partes mencionadas directamente
del campo.
Ahora bien, lo que vos tenes es un campo que contiene los segundos a partir
de una fecha. Por eso funciona la palabra clave seconds. Igualmente pudiste
tener los días a partir de cierta fecha, y entonces sumarias a la fecha base
con la palabra days.
Me llama la atención la fecha 1970, pues existe una API que convierte los
segundos a fecha timestamp, pero esta toma como base el 15 de Octubre de 1582.
Te adjunto definición de timestamp, y de la API que menciono, para que
verifiques si realmente es la fecha 1970.
Saludos.
A timestamp is a seven-part value (year, month, day, hour, minute, second,
and microsecond) that designates a date and time as defined previously, except
that the time includes a fractional specification of microseconds.
The Convert Seconds to Character Timestamp (CEEDATM) API formats a number
representing the number of seconds since 00:00:00 14 October 1582. The output
is a character string such as 1988/07/26 20:37:00.
input_seconds (input)
A 64-bit double floating-point number representing the number of seconds
since 00:00:00 on 14 October 1582. For example, 00:00:01 on 15 October 1582 is
second number 86,401 (24*60*60 + 01). The valid range is 86 400 to 265 621 679
999.999 (23:59:59.999 31 December 9999).
El 15 de junio de 2010 06:28, Josep Sanchez <[email protected]>
escribió:
Tu si que sabes Alex, esto es lo que buscaba, como no lo habia pensado ....
Muchas gracias.
J.Sánchez
----- Original Message -----
From: alex martinez
To: forum.help400
Sent: Tuesday, June 15, 2010 9:14 AM
Subject: Re: En SQL convertir a fecha + hora un campo TIMESAMTP
Hola Josep:
Es mucho más sencillo !!!
solo hay que sumar el número de segundos a la fecha 1-1-1970
Más o menos algo así:
select timestamp('1970-01-01-00.00.00') + 1276578852858 seconds from
qsys2/qsqptabl
Salu2
El 15 de junio de 2010 07:38, Josep Sanchez <[email protected]>
escribió:
Gracias Bernabé pero los timestamp no contienen en las primeras
posiciones el año y luego el mes etc.
Los valores timestamp son el número de segundos (o microsegundos) que
han transcurrido desde una fecha base. Por ejemplo
desde 01/01/1970 a las 00:00 y en mi fichero para ese campo tengo
valores como estos:
..+....1....+....2....+
Timestamp
1.276.578.852.858
1.276.543.463.928
1.276.531.572.321
1.276.526.471.606
1.276.524.121.731
1.276.523.784.384
1.276.519.667.275
1.276.519.630.634
1.276.519.591.728
1.276.519.556.806
1.276.519.525.806
1.276.519.298.401
Por lo que no tengo ni idea de como extraer la fecha de ese valor.
Parece que son los mili-segundos desde 1/1/1970 pero
debe existir una funcion que lo convierta en fecha, porque de otra
forma es muy inexacto, (dividir por 40 años a 365,25 dias por año, y luego por
24 horas a 3600 segundos, mas los dias que llevamos de este año etc..... un
rollo vamos)
Muchas gracias igualmente...
Saludos
J. Sanchez
----- Original Message -----
From: Bernabé Estrada
To: 'forum.help400'
Sent: Tuesday, June 15, 2010 6:29 AM
Subject: RE: En SQL convertir a fecha + hora un campo TIMESAMTP
Entonces lo mas sencillo es hacer armar un campo con el formato de
fecha (yyyy-mm-dd por ejemplo) concatenando los substring de cada parte del
campo. Mas o menos asi: SELECT date( substr(digits(myfld),1,4) || '-' ||
substr(digits(myfld),5,2) || '-' || substr(digits(myfld),7,2)) FROM myarchivo
(Claro, dependiendo de en que posiciones de tu campo estén el año, mes y dia)
Saludos.
From: [email protected]
[mailto:[email protected]] On Behalf Of Josep Sanchez
Sent: Lunes, 14 de Junio de 2010 09:33 a.m.
To: forum.help400
Subject: Re: En SQL convertir a fecha + hora un campo TIMESAMTP
Hola que tal,
year(myfield) me da argumento 1 no valido. Lo mismo que si hago
year(myfield*100000000)
El campo en el fichero es un numerico de 18,0 pero la cifra grabada
son las 18 primeras posiciones de un
Timestamp en tiempo de ejecución.
Supongo que para la base datos es un númerico y basta pero yo
necesito saber que fecha se esconde en esa cifra.
Gracias por tu ayuda.
----- Original Message -----
From: Bernabe Estrada
To: 'forum.help400'
Sent: Monday, June 14, 2010 4:12 PM
Subject: RE: En SQL convertir a fecha + hora un campo TIMESAMTP
No me suena un timestamp de 18, pero proba extraer el month, year y
day para ver si realmente lo reconoce como fecha.
Select year(myfield), month(myfield), day(myfield) …..
Saludos.
From: [email protected]
[mailto:[email protected]] On Behalf Of Josep Sanchez
Sent: Lunes, 14 de Junio de 2010 04:13 a.m.
To: forum.help400
Subject: En SQL convertir a fecha + hora un campo TIMESAMTP
Hola a todos,
En un fichero tengo un campo de 18,0 empaquetado en el que se
guarda un valor timestamp,
(debe ser truncado porque creo recordar que los campos Timestamp
reales ocupaban 26 digitos)
El caso es que intento convetirlo en una fecha normal y no funciona
He probado:
select date(myfield), a.* from myfile a where myfield<>0
y tambien
select date(myfield*100000000), a.* from myfile a where myfield<>0
en ambos casos me devuelve asteriscos...
Alguien sabe como ver este dato convertido en fecha ??
Gracias de antemano.
J.Sanchez
--------------------------------------------------------------------
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
----------------------------------------------------------------------
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
--------------------------------------------------------------------------
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
------------------------------------------------------------------------------
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.