Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #99660
    leandrolbs
    Participante

      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 ??

      #99671
      burga
      Participante

        Você 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;

        #99672
        leandrolbs
        Participante

          obrigado 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.

          #99677
          rman
          Participante

            [quote=”burga”:3h80qndk]Você 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;
            [/quote]

            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 ?

            #99678
            leandrolbs
            Participante

              kkkkkk bota ninja nisso…
              olha essa:
              https://www.profissionaloracle.com.br/mo … pic&t=5217

              #99680
              burga
              Participante

                [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”…

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress