Um SQL recursivo para o comando Replace

Veja nesta dica um script para simular o uso do 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.

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
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados