- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 7 meses atrás por burga.
-
AutorPosts
-
15 de junho de 2011 às 9:41 pm #99660leandrolbsParticipante
Seguinte pessoal, tenho uma tabela cliente, onde o campo email é varchar(4000);
Nas linhas, tenho ex:
leandrolbs@hotmail.com;gustavo@gmail.com;augusto@yahoo.com;
Preciso que retorne no caso do exemplo acima 3 linhas;
Comecei fazendo instr com ‘@’ dps pegando o length, depois instr ‘;’…etc
Alguem tem alguma idea, ou algo mais pratico, ou um script pronto..rs ??
16 de junho de 2011 às 5:41 pm #99671burgaParticipanteVocê pode trabalhar em cima disso aqui:
WITH tabela AS (
SELECT
'leandrolbs@hotmail.com;gustavo@gmail.com;augusto@yahoo.com; ' str,
';' separador
FROM dual
)
SELECT TRIM(token) FROM (
SELECT
SUBSTR(t.separador || t.str || t.separador,
INSTR(t.separador || t.str || t.separador , t.separador, 1, level) + 1,
INSTR(t.separador || t.str || t.separador , t.separador, 1, level + 1) - INSTR(t.separador || t.str || t.separador , t.separador, 1, level) - 1) token
FROM tabela t
CONNECT BY LEVEL < LENGTH(t.separador || t.str) - LENGTH(REPLACE(t.separador || t.str, t.separador)) + 1) t2
WHERE TRIM(t2.token) IS NOT NULL;16 de junho de 2011 às 6:16 pm #99672leandrolbsParticipanteobrigado Burga;
Ontem fiz um script, que pega o 1 email por linha, então dps de pega-lo, jogava pra outra tabela, e fazia update, e então pegava o 2…hehehe funfo;
Esse script ficou show, vou adapta-lo a minha base, muitissímo obrigado.
16 de junho de 2011 às 8:06 pm #99677rmanParticipante[quote=”burga”:3h80qndk]Você pode trabalhar em cima disso aqui:
WITH tabela AS (
[/quote]
SELECT
'leandrolbs@hotmail.com;gustavo@gmail.com;augusto@yahoo.com; ' str,
';' separador
FROM dual
)
SELECT TRIM(token) FROM (
SELECT
SUBSTR(t.separador || t.str || t.separador,
INSTR(t.separador || t.str || t.separador , t.separador, 1, level) + 1,
INSTR(t.separador || t.str || t.separador , t.separador, 1, level + 1) - INSTR(t.separador || t.str || t.separador , t.separador, 1, level) - 1) token
FROM tabela t
CONNECT BY LEVEL < LENGTH(t.separador || t.str) - LENGTH(REPLACE(t.separador || t.str, t.separador)) + 1) t2
WHERE TRIM(t2.token) IS NOT NULL;Burga, não é a primeira vez que vejo você fazendo essas querys ninjas… esse tipo de query é uma query basica pra tirar a certificação de SQL EXPERT ?
16 de junho de 2011 às 8:13 pm #99678leandrolbsParticipantekkkkkk bota ninja nisso…
olha essa:
https://www.profissionaloracle.com.br/mo … pic&t=521716 de junho de 2011 às 8:32 pm #99680burgaParticipante[quote=”rman”:3v8auoun]Burga, não é a primeira vez que vejo você fazendo essas querys ninjas… esse tipo de query é uma query basica pra tirar a certificação de SQL EXPERT ?[/quote]
Pra tirar o OCE SQL (1z047) nem precisa de tudo isso… Lá você precisa saber bem como o Oracle processa subqueries correlacionadas e não correlacionadas, saber os agrupamentos de todos os tipos (GROUPING SETS, CUBE, ROLLUP, etc…) e as diferenças nos JOINS (INNER, NATURAL, FULL, LEFT, RIGHT,…). Funcionamento de índices e constraints, grants, views… Com isso já da pra pensar em fazer a prova.
Não cai a cláusula MODEL, nem SQL analítico… Cai muito mais conceito do que SQLs “super sofisticados”…
-
AutorPosts
- Você deve fazer login para responder a este tópico.