Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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
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)
)
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
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))
)
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)
)
c'est vrai j'ai pas pensé à REPEAT
Merci pour le partage 🙂