Qlik Community

QlikView App Dev

Discussion Board for collaboration related to QlikView App Development.

Announcements
Customer & Partners, DEC. 9, 11 AM ET: Qlik Product & Strategy Roadmap Session: Data Analytics REGISTER NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Uso de la funcion mid() e index()

Hola, tengo una duda con los formatos texto de qlikview, me gustaria saber si alguien puede echarme una mano.

Resulta que tengo una campo de tipo texto donde tengo tiempos en horas, minutos y segundos. El formato es algo como esto:"12h 55m 23s" o "1h 2m 5s", Me gustaria poder convertir ese entero a segundos y realizar una operacion, pero no entiendo bien como hacerlo. He estado mirando y con las funciones mid() e index() se puede hacer algo asi, pero necesito ayuda, ya que no consigo que saque lo que necesito!!

Alguien sabe como podria hacerlo?

un saludo!

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Hola,

No es que se "maree" sino que si el formato no es consistente (siempre "1h 2m 3s", sino "1h 2m" o "2m 3s" o "3s"), el primer dígito siempre es interpretado como horas, el siguiente como minutos y el siguiente como segundos, en la función que te he pasado arriba.

No obstante, puedes aplicar condicionales siguiendo la misma lógica, que deberían devolver los resultados correctos (utilizo una variable vData en lugar de la cadena completa de texto por comodidad):

=Interval(

     If(Index(vData, 'h'), PurgeChar(Replace(Replace(vData, 'h ', ':'), 'm ', ':'), 's'),

          If(Index(vData, 'm'), '00:' & PurgeChar(Replace(vData, 'm ', ':'), 's'),

               '00:00:' & PurgeChar(vData, 's')))

     , 'ss')

Espero que te sirva la idea para avanzar.

Miguel

View solution in original post

4 Replies
Miguel_Angel_Baeyens

Hola,

Probablemente algo como lo siguiente te funcionará:

=Interval(PurgeChar(Replace(Replace('12h 55m 23s', 'h ', ':'), 'm ', ':'), 's'), 'ss')

Espero que te sirva.

Miguel

Not applicable
Author

Hoola Miguel, gracias por contestar con tanta celeridad, pero la funcion que has puesto no hace lo que busco. Veras, con el campo "21s" me devuelve el valor 1814400, y con el campo "8m 21s" me devuelve el valor 30060.

No se si quizas la funcion que me has pasado se marea cuando no hay horas. puede ser?

Miguel_Angel_Baeyens

Hola,

No es que se "maree" sino que si el formato no es consistente (siempre "1h 2m 3s", sino "1h 2m" o "2m 3s" o "3s"), el primer dígito siempre es interpretado como horas, el siguiente como minutos y el siguiente como segundos, en la función que te he pasado arriba.

No obstante, puedes aplicar condicionales siguiendo la misma lógica, que deberían devolver los resultados correctos (utilizo una variable vData en lugar de la cadena completa de texto por comodidad):

=Interval(

     If(Index(vData, 'h'), PurgeChar(Replace(Replace(vData, 'h ', ':'), 'm ', ':'), 's'),

          If(Index(vData, 'm'), '00:' & PurgeChar(Replace(vData, 'm ', ':'), 's'),

               '00:00:' & PurgeChar(vData, 's')))

     , 'ss')

Espero que te sirva la idea para avanzar.

Miguel

View solution in original post

Not applicable
Author

Hace exactamente lo que necesitaba.

Muchas gracias!!!