Eliminar caracteres não numéricos de strings
No nosso primeiro workaround sobre SQL, apresentarei uma técnica para retirar todos os caracteres não numéricos de uma string.
Contexto
Imagine que um colega lhe peça para ajustar uma coluna da sua tabela de usuários, removendo todos os caracteres não numéricos do campo RG. Este campo é de preenchimento livre, ou seja, pode conter letras em qualquer posição da string.
Como você resolveria este problema?
Identificando e corrigindo os registros incorreto
Nossa técnica utiliza um loop "WHILE" que percorre todas as posições de uma string. O script irá substituir cada ocorrência de caractere não numérico por um espaço em branco (''). Quanto ao critério de parada, consideraremos a inexistência de caracteres não numéricos na string de entrada.
CREATE FUNCTION RetiraCaracteresNaoNumericos(@STR NVARCHAR(20)) RETURNS NVARCHAR(20) AS BEGIN WHILE PATINDEX('%[^0-9]%', @STR) > 0 SET @STR = STUFF(@STR, PATINDEX('%[^0-9]%', @STR), 1, ' ') RETURN @STR END
Execução em detalhes
A função recebe uma string que será analisada em um loop "WHILE" enquanto a expressão "PATINDEX" for verdadeira.
PATINDEX('%[^0-9]%', @str) > 0
Dentro do loop, a função "PATINDEX" é executada novamente para obter a posição da primeira ocorrência de um caractere não numérico. O valor não numérico encontrado é então substituído por um espaço em branco ('') através da função "STUFF".
SET @STR = STUFF(@STR, PATINDEX('%[^0-9]%', @STR), 1, ' ')
O laço é executado até que haja somente caracteres numéricos na string.
OBS: Este workaround é bem útil, mas deve ser utilizado com sabedoria. Antes de implementa-lo, consulte seu DBA.
Até à próxima.