3
respostas

Erro de script de expressão

Por curiosidade resolvi utilizar a expressão SUBSTRING(ENDERECO, 1, FINDSTRING(ENDERECO, ",", 1) - 1) ao invês da SUBSTRING(ENDERECO,FINDSTRING(ENDERECO,"-",1) + 2,50) no entanto recebi mensagem de erro executar (Execução do pacote concluida com erro).

3 respostas

Oi Rafael,

Pelo que você descreveu, o erro provavelmente está ocorrendo porque a função FINDSTRING(ENDERECO, ",", 1) pode estar retornando 0 (zero) quando a vírgula não é encontrada na string. Isso faz com que o cálculo FINDSTRING(ENDERECO, ",", 1) - 1 resulte em um valor negativo, o que não é permitido na função SUBSTRING.

Já na sua outra expressão SUBSTRING(ENDERECO,FINDSTRING(ENDERECO,"-",1) + 2,50), como você está pegando a substring a partir de uma posição fixada depois do hífen, isso pode estar funcionando porque o hífen está sempre presente, e o comprimento de 50 garante que não ultrapasse o tamanho da string.

Para evitar o erro com a vírgula, você pode: • Garantir que a vírgula exista antes de usar o SUBSTRING (exemplo: usar uma condição IF para verificar se FINDSTRING(ENDERECO, ",", 1) > 0). • Ou tratar o caso em que a vírgula não é encontrada para usar outro critério ou simplesmente retornar a string inteira.

O erro é somente com a expressão SUBSTRING(ENDERECO, 1, FINDSTRING(ENDERECO, ",", 1) - 1), a virgula existe na string, se eu remover -1 me retorna o valor com a virgula inclusa na string

Entendi, Rafael!

Se a vírgula realmente existe e o erro continua, é bem provável que o problema esteja acontecendo quando a função FINDSTRING(ENDERECO, ",", 1) retorna 1 isso faz com que o SUBSTRING tente usar start=1 e length=0, o que pode gerar erro dependendo do ambiente ou da ferramenta que você está usando (por exemplo, no SSIS ou alguma engine SQL mais sensível).

Você pode testar usando uma função condicional (como IF ou ?:, dependendo do ambiente) para garantir que o valor de FINDSTRING seja maior que 1 antes de subtrair 1. Algo como: SUBSTRING(ENDERECO, 1, FINDSTRING(ENDERECO, ",", 1) - (FINDSTRING(ENDERECO, ",", 1) > 1 ? 1 : 0)) Ou então, se não tiver como fazer essa verificação direto na expressão, você pode tentar deixar o -1 e tratar com TRIM depois, caso a vírgula seja o primeiro caractere mesmo (o que seria raro em endereços).