Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
GuillaumeB
Contributor II
Contributor II

QlikSense - Problème pour convertir un champs heure en format heure de QS : TIME

Bonjour,

Ma base de donnée a un champs Heure de six caractères remontant l'information hhmmss (ceci n'est pas le format.).

Cependant, en fonction de l'heure ce champs va de 1 à 6 caractères :

00:46:00 = 4600

11:23:31 = 112331

Comment faire pour avoir un format TIME dans le script en évitant de faire une cascade de condition en fonction du nombre de caractère ?

 

Un piste serait de format l'ajout de 0 avant la valeur jusqu'à atteinte systématiquement 6 caractère.

 

Je suis ouvert à vos propositions/solutions,

 

Guillaume Boquet

 

 

Guillaume Boquet
Log'S
2 Solutions

Accepted Solutions
Taoufiq_Zarra

a mon avis il faut passer le nombre de caractère,  je te propose cette solution :

 

=
Maketime(num(left(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),2)),
num(
right(left(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),4),2)
),
num(right(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),2)
))

 

voici le résultat pour 4600 et 112331

 

Sans titre.png

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉

View solution in original post

GuillaumeB
Contributor II
Contributor II
Author

Bonjour,

Merci pour ta réponse, j'ai juste ajouté le calcul du nombre de 0 pour alléger le code :

MAKETIME(

LEFT(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2),

MID(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2,2),

RIGHT(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2)

)

 

Guillaume Boquet
Log'S

View solution in original post

4 Replies
Taoufiq_Zarra

a mon avis il faut passer le nombre de caractère,  je te propose cette solution :

 

=
Maketime(num(left(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),2)),
num(
right(left(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),4),2)
),
num(right(pick(match(len(_LE_CHAMP_),1, 2,3,4,5,6),'00000'&_LE_CHAMP_,'0000'&_LE_CHAMP_,'000'&_LE_CHAMP_,'00'&_LE_CHAMP_,'0'&_LE_CHAMP_,_LE_CHAMP_),2)
))

 

voici le résultat pour 4600 et 112331

 

Sans titre.png

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
brunobertels
Master
Master

Bonjour 

Une autre approche ci dessous : 

 

if(len(trim(CHAMPS))=4,

maketime('00',left(CHAMPS,2),right(CHAMPS,2)),

maketime(left(CHAMPS,2),mid(CHAMPS,2,2),right(CHAMPS,2))

)

GuillaumeB
Contributor II
Contributor II
Author

Bonjour,

Merci pour ta réponse, j'ai juste ajouté le calcul du nombre de 0 pour alléger le code :

MAKETIME(

LEFT(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2),

MID(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2,2),

RIGHT(REPEAT('0',6-LEN(_LE_CHAMP))&_LE_CHAMP,2)

)

 

Guillaume Boquet
Log'S
Taoufiq_Zarra

c'est vrai j'ai pas pensé à REPEAT 

Merci pour le partage 🙂

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉