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.

Next Post Previous Post
No Comment
Add Comment
comment url