Diego, tudo bem? Já fiz isso usando a função INSTR do PL/SQL. Era algo que combinava as funções INSTR SUBSTR e REPLACE Não tenho o exemplo aqui agora, mas a dinâmica é algo do tipo:
Com o INSTR vc consegue obter a posição da ocorrência do "||" (duplo pipe). No seu caso, retornaria 33, se não me engano. Daí, com o REPLACE e o SUBSTR, vc consegue substituir os caracteres das posições 33 e 34 (||) por um NULL, por exemplo. Dê uma olhada na função REGEXP_INSTR tb. Ela pode ajudar. Abraços, e desculpe por não postar um exemplo aqui agora. Mas SUBSTR é o caminho, rs. []'s Em 7 de abril de 2016 16:24, Diego Melo diegopm...@gmail.com [oracle_br] < oracle_br@yahoogrupos.com.br> escreveu: > > > @Emerson, > > a sua função deu certo. Muito obrigado. > > @Angelo, > quiando vem vazio, deve ficar null mesmo, o CPF foi só um exemplo que me > veio na cabeça, mas são outros campos na verdade, que tem que vir vazio ou > null mesmo. > > Valeu !!!! > > 2016-04-07 16:12 GMT-03:00 angelo angelolis...@gmail.com [oracle_br] < > oracle_br@yahoogrupos.com.br>: > >> >> >> Boa tarde, Diego, >> >> Será que ao invés de dar ruim na parada, não deu bom não? >> >> Pois não ficou claro sobre o que deveria acontecer no caso em que não >> vier o cpf na string. >> >> To entendendo que se nao veio nada, entraria vazio mesmo, melhor, os >> pipes. >> Você está importando isso de algum arquivo edi ? Campo cpf veio vazio, o >> que entraria no lugar ? ou tinha cpf e nao inseriu ? >> >> >> 99|1500002|LUCIANA XIMENES SILVA|o que fazer quando aqui for vazio? |BRA|0|| >> >> >> >> >> >> 2016-04-07 15:57 GMT-03:00 Diego Melo diegopm...@gmail.com [oracle_br] < >> oracle_br@yahoogrupos.com.br>: >> >>> >>> >>> Olá galera, tudo bem ? >>> >>> Por gentileza, poderiam me ajudar em um SQL. >>> >>> Minha versão do Oracle é: >>> >>> Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi >>> PL/SQL Release 10.2.0.5.0 - Production >>> "CORE 10.2.0.5.0 Production" >>> TNS for Linux: Version 10.2.0.5.0 - Production >>> >>> Tenho uma tabela com uma string e diversos campos separados por | (pipe) >>> >>> Preciso trazer cada campo em uma coluna. Eu até consegui uma maneira, o >>> problema é que quando um registro não tem o campo preenchido e a string >>> traz ||, ai da ruim na minha solução. Detalhe, eu não posso atlerar a >>> string original >>> >>> Alguém teria uma solução em Oracle SQL ?? >>> >>> Fiz do seguinte modo: >>> >>> >>> CREATE TABLE t_1 ( strings varchar2(4000)); >>> /INSERT INTO t_1VALUES ('99|1500001|JOANA PRADO |08227525490|BRA|0||'); >>> INSERT INTO t_1VALUES ('99|1500002|LUCIANA XIMENES SILVA||BRA|0||'); >>> INSERT INTO t_1VALUES ('99|1500003|JULIA ROBERTS|44303539805|USA|0||'); >>> COMMIT; >>> SELECT regexp_substr(strings,'[^|]+',1,1) identificador, >>> regexp_substr(strings,'[^|]+',1,2) id, >>> regexp_substr(strings,'[^|]+',1,3) nome, >>> regexp_substr(strings,'[^|]+',1,4) cpf, >>> regexp_substr(strings,'[^|]+',1,5) pais, >>> regexp_substr(strings,'[^|]+',1,6) tipoFROM t_1 >>> >>> >>> >>> Reparem que o registro id 1500002 não tem cpf e ai o campo de pais acaba >>> ocupando o espaço do CPF. >>> >>> Grato. >>> >>> Diego >>> >>> >>> >>> >> > > -- Atenciosamente, *Gustavo Guedes de Sene*