Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Dzedai
Contributor II
Contributor II

Correction champ timestamp

Bonjour à tous,

Suite à une mise à jour de l'EAI traitant les données, un champ timestamp "version" que je recevais en format "YYYY-MM-DD hh:mm:ss" a été modifié avec un chiffre en début (et des _): "5 YYYY-MM-DD_hh_mm_ss" ou "10 YYYY-MM-DD_hh_mm_ss"

Dzedai_0-1654762201812.png

Je cherche un moyen dans mon script d'enlever le chiffre avant le timestamp pour que mes maquettes fonctionnent à nouveau car là tout plante 😕

J'ai essayé ,if(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss') pour uniformiser mais le chiffre en début de champ, qui est aléatoire, bloque la correction.

Vous auriez une solution pour dire à Qlik d'enlever ce qui se trouve avant YYYY ? Pour qu'après la correction d'uniformisation s'applique?

Merci +++ d'avance et bonne journée

(j'ai demandé un changement à la source pour revenir au format précédent mais ça va prendre quelques semaines et entre temps les données arrivant aux mauvais format ne sont pas prises en compte)

1 Solution

Accepted Solutions
brunobertels
Master
Master

Bonjour 

Cà devrait résoudre le cas : 

 

[Table1]:

load *,

if(len(version)=19,

Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss'),

if(index(version,' ',1)<=3 ,

timestamp(

Timestamp#(
date(subfield(subfield(version,' ',2),'_',1),'YYYY-MM-DD')
&' '&
time#(replace(right(version,8),'_',':'),'hh:mm:ss')

,'YYYY-MM-DD hh:mm:ss'))

)) as version_OK

;
LOAD * INLINE
[
date.date,version
18/05/2022,10 2022-05-23_08_39_08
19/05/2022,1 2022-05-23_08_39_08
20/05/2022,2022-05-23_08_39_08

](delimiter is ',');

 

brunobertels_0-1656669345122.png

 

View solution in original post

9 Replies
DavidDocquoyBaudelet
Contributor III
Contributor III

Hello,

L'idée serait d'utiliser la fonction subfield comme cela : subfield(ChampDate,' ')

Et de vérifier que la 1ere valeur extraite est bien une date.

Si ca n'est pas le cas, alors on est dans le nouveau format de date.

 

 
brunobertels
Master
Master

Bonjour 

Pour supprimer le chiffre aléatoire en début, enlever les '_' , les remplacer par ':'  => 

if(index('1 2022-05-23_08_39_08',' ',1)=2 ,

Timestamp#(
date(subfield(subfield('1 2022-05-23_08_39_08',' ',2),'_',1),'YYYY/MM/DD')&' '&
replace(right('1 2022-05-23_08_39_08',8),'_',':') ,'YYYY-MM-DD HH:MM:SS') ,

Timestamp#(version,'YYYY-MM-DD_hh_mm_ss')

)

Dzedai
Contributor II
Contributor II
Author

Merci bien de vos retours, je n'arrive pas à obtenir le champ corrigé sans le chiffre aléatoire mais je continue de chercher avec vos aides. 

brunobertels
Master
Master

Bonjour 

mettre if (index(…) <=3 et non 

=2 afin de tenir compte des nombres au début à 1 ou 2 chiffres 

Dzedai
Contributor II
Contributor II
Author

Merci du complément, j'ai essayé avec <=3 mais ça ne fonctionne pas non plus. J'ai l'impression de ne pas être loin mais je suis toujours bloqué avec le mauvais format.

Dzedai
Contributor II
Contributor II
Author

Si quelqu'un à le même soucis au final j'ai ajouté:

Right(version,19) as version_ok

avant la partie d'harmonisation:

 if(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss') et c'est bon!

Dzedai
Contributor II
Contributor II
Author

Bon je me suis réjoui trop vite, le champ modifié sans les chiffres aléatoire du début ('YYYY-MM-DD_hh_mm_ss') n'est pas reconnu comme un timestamp donc la correction des _ en : ne fonctionne pas....keep searching

..je l'aurais un jour, je l'aurai !

brunobertels
Master
Master

Bonjour 

Cà devrait résoudre le cas : 

 

[Table1]:

load *,

if(len(version)=19,

Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss'),

if(index(version,' ',1)<=3 ,

timestamp(

Timestamp#(
date(subfield(subfield(version,' ',2),'_',1),'YYYY-MM-DD')
&' '&
time#(replace(right(version,8),'_',':'),'hh:mm:ss')

,'YYYY-MM-DD hh:mm:ss'))

)) as version_OK

;
LOAD * INLINE
[
date.date,version
18/05/2022,10 2022-05-23_08_39_08
19/05/2022,1 2022-05-23_08_39_08
20/05/2022,2022-05-23_08_39_08

](delimiter is ',');

 

brunobertels_0-1656669345122.png

 

Dzedai
Contributor II
Contributor II
Author

Oui top, merci bien pour l'aide!