Um SQL recursivo para o comando Replace

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja nesta dica um script para simular o uso do replace.


Um SQL
recursivo para o comando Replace

 

Estava frustrado pois não tinha em mãos a função SQL REPLACE() que trabalharia como TRIM ou SUBSTRING, então eu a criei. Esta função pode ser muito utilizada para limpar os endereços de dados e outras informações que precisem de mudanças em massa. Para utilizá-la, copie o código (não os comentários) e coloque na pasta interactive SQL no ISeries(STRSQL). Execute o comando e você terá adicionado esta User Defined Function para sua lista de funções disponíveis. Abaixo encontra-se a sintaxe para usa-lo:

·         REPLACE(SourceString, FindString, NewString) onde SourceString é a string de busca, FindString é a string que você deseja substituir e NewString é a string que você coloca no lugar do FindString.

 

Esta função é recursiva. Dessa forma, ela irá substituir todas as ocorrências de FindString dentro da SourceString. A função acomodará qualquer tamanho de uma string até 2000 caracteres.

 

-- FORMAT FOR THIS USER DEFINED SQL FUNCTION IS:

-- REPLACE(SOURCESTR,FINDSTR,NEWSTR)

 

CREATE FUNCTION REPLACE

  (SOURCESTR   VARCHAR(2000),

    FINDSTR     VARCHAR(2000),

    NEWSTR      VARCHAR(2000)  )

  RETURNS       VARCHAR(2000)

  LANGUAGE      SQL

  RETURNS NULL ON NULL INPUT

 

BEGIN

 

  DECLARE SSTRLEN    INT ;

  DECLARE POSOFSTR   INT ;

  DECLARE RIGHTLEN   INT ;

  DECLARE LEFTSTR    VARCHAR(2000) ;

  DECLARE RIGHTSTR   VARCHAR(2000) ;

  DECLARE RTNSTR     VARCHAR(2000) ;

 

  SET SSTRLEN   = LENGTH(SOURCESTR) ;

  SET POSOFSTR  = POSSTR(SOURCESTR,FINDSTR) ;

 

  CASE POSOFSTR

    WHEN 0  THEN

      SET RIGHTLEN = 0 ;

    ELSE

      SET RIGHTLEN = (SSTRLEN+1) - LENGTH(FINDSTR) - POSOFSTR ;

  END CASE ;

 

  CASE RIGHTLEN

    WHEN 0  THEN

      SET RIGHTSTR = '' ;

    ELSE

      SET RIGHTSTR = SUBSTR(SOURCESTR,(SSTRLEN+1)-RIGHTLEN,RIGHTLEN) ;

  END CASE ;

 

  SET LEFTSTR = '' ;

 

  CASE POSOFSTR

    WHEN 0  THEN

      SET LEFTSTR = SOURCESTR ;

    WHEN 1  THEN

      SET LEFTSTR = NEWSTR ;

    ELSE

      SET LEFTSTR = SUBSTR(SOURCESTR,1,(POSOFSTR-1))||NEWSTR ;

  END CASE;

 

  CASE RIGHTLEN

    WHEN 0  THEN

      SET RTNSTR = LEFTSTR ;

    ELSE

      CASE POSSTR(RIGHTSTR,FINDSTR)

        WHEN 0  THEN

          SET RTNSTR = LEFTSTR||RIGHTSTR ;

        ELSE

          SET RTNSTR = LEFTSTR||REPLACE(RIGHTSTR, FINDSTR, NEWSTR) ;

      END CASE ;

  END CASE ;

 

  RETURN RTNSTR;

 

END

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?