Estou com uma dúvida.
Tenho duas tabelas:
------
Tab1
NomeAbrev
------
Tab2
NomeCompleto
Idade
------
Tab1
[Ab
Bc
De
o a]
------
Tab2
[Abacate, 22
Aibcs, 10
Cade, 50
Joao, 30
Maria, 40
Abgail, 60
Paulo andre, 100
Carlos, 33]
--------
Como faço para ter o seguinte resultado:
Abacate, 22
Aibcs, 10
Cade, 50
Abgail, 60
Paulo andre, 100
Pensei em algo como:
Select NomeCompleto, Idade from Tab2, Tab1 where NomeCompleto like NomeAbrev;
ou então:
Select NomeCompleto, Idade from Tab2, Tab1 where instr(NomeCompleto, NomeAbrev);
Mas não funciona.
Alguma sugestão?
Like com linhas de outra tabela
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Olá Vrbrant,
Você está quase chegando lá. Seria interessante combinar a instrução INSTR com UPPER neste caso.
Faça este teste:
O resultado do SELECT acima deve dar um resultado parecido com este
Mesmo assim, esta situação só funcionará se não existirem caracteres acentuados nas tabelas.
Se for necessário você inserir caracteres e fazer com que ORACLE ignore os acentos, você pode adicionar na sua condição de WHERE o comando REPLACE, para remover eventuais acentos nas comparações (ex: REPLACE('á','a') = 'a').
Se tiver outras dúvidas, fique à vontade para postar aqui.
Abraços,
Sergio Coutinho
Você está quase chegando lá. Seria interessante combinar a instrução INSTR com UPPER neste caso.
Faça este teste:
SQL> CREATE TABLE TBL_ABREV (NO_ABREV VARCHAR2(5));
Tabela criada.
CREATE TABLE TBL_COMPLET (NO_COMPLET VARCHAR2(15),NU_IDADE NUMBER(3));
INSERT INTO TBL_ABREV VALUES ('Ab');
INSERT INTO TBL_ABREV VALUES ('Bc');
INSERT INTO TBL_ABREV VALUES ('De');
INSERT INTO TBL_ABREV VALUES ('o a');
COMMIT;
INSERT INTO TBL_COMPLET VALUES ('Abacate', 22);
INSERT INTO TBL_COMPLET VALUES ('Aibcs', 10);
INSERT INTO TBL_COMPLET VALUES ('Cade', 50);
INSERT INTO TBL_COMPLET VALUES ('Joao', 30);
INSERT INTO TBL_COMPLET VALUES ('Maria', 40);
INSERT INTO TBL_COMPLET VALUES ('Abgail', 60);
INSERT INTO TBL_COMPLET VALUES ('Paulo andre', 100);
INSERT INTO TBL_COMPLET VALUES ('Carlos', 33);
COMMIT;
SELECT A.NO_ABREV,C.NO_COMPLET,C.NU_IDADE
FROM TBL_ABREV A,TBL_COMPLET C
WHERE INSTR(UPPER(C.NO_COMPLET),UPPER(A.NO_ABREV)) <> 0;
NO_AB NO_COMPLET NU_IDADE
----- --------------- ----------
Ab Abacate 22
Ab Abgail 60
Bc Aibcs 10
De Cade 50
o a Paulo andre 100
Se for necessário você inserir caracteres e fazer com que ORACLE ignore os acentos, você pode adicionar na sua condição de WHERE o comando REPLACE, para remover eventuais acentos nas comparações (ex: REPLACE('á','a') = 'a').
Se tiver outras dúvidas, fique à vontade para postar aqui.
Abraços,
Sergio Coutinho
Oi STCOUTINHO,
Perfeito!
Funcionou, realmente o UPPER estava dando diferença no meu resultado. E também o final da query "<> 0".
Para quem não sabe como funciona o INSTR, aqui tem uma boa explicação: http://www.dartanghan.com.br/oracle-instr-function/.
Mas de forma geral, o INSTR retorna a posição de uma substring numa string.
Obrigado!
Perfeito!

Funcionou, realmente o UPPER estava dando diferença no meu resultado. E também o final da query "<> 0".
Para quem não sabe como funciona o INSTR, aqui tem uma boa explicação: http://www.dartanghan.com.br/oracle-instr-function/.
Mas de forma geral, o INSTR retorna a posição de uma substring numa string.

Obrigado!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante