[firebase-br] Remover o ultimo caractere de uma string

Gladiston Santana gladiston em vidy.com.br
Qui Fev 18 15:42:29 -03 2016


Obrigado pela prontidão, mas não entendi bem o seu esquema com o reverse.
O problema de fazer o que eu quero é que a funcão right, assim como a
maioria das que lidam com strings são determinísticas, você precisa saber o
tamanho previamente para fazer o que eu quero.
Isso é ótimo para variáveis que recebem e depois processam, mas é inutil
para onde não há como processar numa variáveis antes.
Mas achei uma função no firbeird que não é determinística, a substring,
onde o ultimo parametro pode ser suprimido e ele pegará até o termino da
string.
De inicio, não parece resolver o problema, mas se eu jogar a vírgula para o
inicio de cada palavra (ao invés do termino como era antes) então resolve
porque a frase começará com virgula(invertendo o problema), mas daí é só
usar o substring e pegar da segunda char em diante.  Veja o teste:

execute block
returns(resultado varchar(255))
as
-- simulando as varaiaveis da tabela
declare variable STATUS varchar(1)='A';
declare variable SE_AUTORIZAR varchar(1)='S';
declare variable SE_CALCULAR varchar(255)='S';
declare variable SE_VENCER varchar(255)='N';
begin
  resultado=SUBSTRING(REPLACE(
      CASE
        WHEN ((STATUS='A') AND (SE_AUTORIZAR='S') AND (SE_CALCULAR='S') AND
(SE_VENCER='S')) THEN 'Informativo'
        WHEN (STATUS='A') THEN
           iif(SE_AUTORIZAR='S', ',autorizar', '')||
           iif(SE_CALCULAR='S',',[re]calcular','')||
           iif(SE_VENCER='S',',vencer','')
        WHEN (STATUS='I') THEN 'Informativo'
        WHEN (STATUS='C') THEN 'Desbloqueado'
        WHEN (STATUS='F') THEN 'Concluído'
        ELSE  'Desconhecido'
      end, ' ','') FROM 2);
  suspend;
end

Agora, é só jogar a expressão acima no campo calculado e estará resolvido.



Mais detalhes sobre a lista de discussão lista