Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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!