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