Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
cancel
Showing results for 
Search instead for 
Did you mean: 
oliveira1903
Contributor III
Contributor III

TextBetween - Lógica

Olá, pessoal.

Estou com dificuldade de extrair informações de um campo após aplicação de algumas regras.

Tenho um campo que segue mais ou menos um padrão:

0000005-88.1500.1.23.0000 (15000010000050ABC)

 

Tem vezes que o número entre parênteses não existe mas os parênteses sim:

0000007-89.1520.1.25.0000 () 

 

Tem vezes que o parênteses não está presente:

0000001-53.1900.1.27.0000 

 

Tem vezes que o número não tem parênteses mas também não segue a quantidade de caracteres do exemplo acima:

00011/1645-0052101-53.0089.5.10.0004

 

Preciso criar uma lógica para quando existir o "ABC", vir o número completo dentro dos parênteses, ou seja, 15000010000050ABC. 17 caracteres contando com o "ABC". Isso é padrão, sempre que tiver o ABC, o número será formado pelos 14 caracteres à esquerda do ABC.

Quando não tiver "ABC" teria que vir o número disponível mas sem parênteses, apenas o número mesmo sem o pontos, tracinhos e barras. Exemplo: 00047200500927015319895100004 e 00000058815001230000.

Estou usando o TextBetween para trazer apenas o que está entre os parênteses mas tem vezes que os parênteses estão sem nada. Empaquei com várias funções e combinações de funções (right/index/mid/textbetween, purgechar/if) mas nada está funcionando e não estou conseguindo sair do lugar. =/

Resumo: considerar o número que estiver dentro dos parênteses, se não tiver, considerar o disponível.

Alguém tem alguma sugestão?

Desde já, agradeço a atenção. 😉

 

 

1 Solution

Accepted Solutions
danilostochi
Creator II
Creator II

Boa noite,

Veja se isso pode lhe ajudar.

 


LOAD


if(WildMatch(campo,'*ABC*')=1,TextBetween(campo,'(',')'), PurgeChar(campo,'-.()/')) as teste,

* INLINE [
campo
0000005-88.1500.1.23.0000 (15000010000050ABC)
0000005-88.1500.1.13.0000 (15000010100050ABC)
0000007-89.1520.1.25.0000 ()
0000001-53.1900.1.27.0000
00011/1645-0052101-53.0089.5.10.0004
];

Screenshot_1.png

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com

View solution in original post

2 Replies
danilostochi
Creator II
Creator II

Boa noite,

Veja se isso pode lhe ajudar.

 


LOAD


if(WildMatch(campo,'*ABC*')=1,TextBetween(campo,'(',')'), PurgeChar(campo,'-.()/')) as teste,

* INLINE [
campo
0000005-88.1500.1.23.0000 (15000010000050ABC)
0000005-88.1500.1.13.0000 (15000010100050ABC)
0000007-89.1520.1.25.0000 ()
0000001-53.1900.1.27.0000
00011/1645-0052101-53.0089.5.10.0004
];

Screenshot_1.png

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
oliveira1903
Contributor III
Contributor III
Author

Agradeço, Danilo.

 

Fiz uma pequena adaptação pois no meu modelo de dados não estava funcionando. O que achei bem esquisito pois carreguei da mesma forma que vc, por tabela inline, e a lógica funcionou perfeitamente. 

Ficou da seguinte forma:

IF(WildMatch([Campo],'ABC','*ABC*','ABC*','*ABC'),
TextBetween([Campo],'(',')'),PurgeChar([Campo],'-.()/')) AS teste,

 

Obrigada. Ajudou demais!