Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
josemaria
Creator II
Creator II

convertir campo en formato hora

Hola a todos,

Necesitaría convertir un campo que me traigo de una base de datos en formato hora, los datos de ese campo vienen de esta manera (0,15,130,2215,174020) .

0= 00:00:00

15= 00:00:15

130= 00:01:30

2215= 00:22:15

174020= 17:40:20

Teneis alguna idea de como podría convertir este campo en formato fecha dentro del Script?

Muchas gracias

Saludos

1 Solution

Accepted Solutions
Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Hola José María:

Disculpa el paréntesis del TIME# estaba mal ubicado

Hora:

LOAD Len(EGRGTM) as Tamaño,

  If (Len(EGRGTM) = 1, Time(Time#(EGRGTM, 's')),

     If (Len(EGRGTM) = 2, Time(Time#(EGRGTM, 'ss')),

     If (Len(EGRGTM) = 3, Time(Time#(EGRGTM, 'mss')),

     If (Len(EGRGTM) = 4, Time(Time#(EGRGTM, 'mmss')),

     If (Len(EGRGTM) = 5, Time(Time#(EGRGTM, 'hmmss')),

     If (Len(EGRGTM) = 6, Time(Time#(EGRGTM, 'hhmmss'))))))))as Formato_Hora;

LOAD * INLINE [

    EGRGTM

    0

    15

    130

    2215

    174020

];

Saludos

Joaquín

View solution in original post

7 Replies
Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Hola José María:

Yo veo una posibilidad con un poco de trabajo, te pongo la idea y tú la desarrollas

Se trata de identificar el tamaño de la cadena con esta función Len(TuHora)

If (Len(TuHora) = 1, Time(Time#(TuHora), 's'),

     If (Len(TuHora) = 2, Time(Time#(TuHora), 'ss'),

          If (Len(TuHora) = 3, Time(Time#(TuHora), 'mss'),


....


))) as TuHoraEditada


La función Time# comprueba que tu valor sea correcto según el formato, la función Time lo convierte en formato hora


Disculpa si me he dejado algún paréntesis


Saludos

Joaquín

josemaria
Creator II
Creator II
Author

Hola Joaquin,

Gracias por la contestación, pero no se si estoy haciendo algo mal pero no me funciona,

     If (Len(EGRGTM) = 1, Time(Time#(EGRGTM), 's'),

     If (Len(EGRGTM) = 2, Time(Time#(EGRGTM), 'ss'),

     If (Len(EGRGTM) = 3, Time(Time#(EGRGTM), 'mss'),

     If (Len(EGRGTM) = 4, Time(Time#(EGRGTM), 'mmss'),

     If (Len(EGRGTM) = 5, Time(Time#(EGRGTM), 'hmmss'),

     If (Len(EGRGTM) = 6, Time(Time#(EGRGTM), 'hhmmss')))))))as Formato_Hora,

no me devuelve nada!

Gracias por todo

ssanchez
Partner - Contributor III
Partner - Contributor III

Hola Jose Maria:

Quizás una opción más sencilla es forzar a la longitud máxima de la cadena cargada añadiendo 0 a la izquierda y convertirla posteriormente a formato hora:

Time(Time#(Right('000000' & Hora,6),'hhmmss')) as NuevaHora

El resultado creo que ofrece los datos que necesitas dando formato hora al nuevo campo.

Hora.png

Espero que te sea útil.

Un saludo

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

Hola José María:

Disculpa el paréntesis del TIME# estaba mal ubicado

Hora:

LOAD Len(EGRGTM) as Tamaño,

  If (Len(EGRGTM) = 1, Time(Time#(EGRGTM, 's')),

     If (Len(EGRGTM) = 2, Time(Time#(EGRGTM, 'ss')),

     If (Len(EGRGTM) = 3, Time(Time#(EGRGTM, 'mss')),

     If (Len(EGRGTM) = 4, Time(Time#(EGRGTM, 'mmss')),

     If (Len(EGRGTM) = 5, Time(Time#(EGRGTM, 'hmmss')),

     If (Len(EGRGTM) = 6, Time(Time#(EGRGTM, 'hhmmss'))))))))as Formato_Hora;

LOAD * INLINE [

    EGRGTM

    0

    15

    130

    2215

    174020

];

Saludos

Joaquín

josemaria
Creator II
Creator II
Author

Gracias Joaquin,

Es lo que necesitaba.

Saludos

josemaria
Creator II
Creator II
Author

Gracias Santiago,

Tienes razón es una manera sencilla pero muy efectiva para poderlo solucionar.

muchas gracias por tu aportación.

Saludos

Joaquin_Lazaro
Partner - Specialist II
Partner - Specialist II

De nada, hasta la próxima