Em algumas situações precisamos que a consulta de uma campo retorne somente o valor númerico, desprezando máscaras, ou valores inconsistentes, por exemplo o CEP sem as edições.
Abaixo uma função para o SQL Server que "limpa" o conteúdo do campo deixando somente os caracteres numéricos no resultado.
CREATE FUNCTION [dbo].[TiraLetras]
(
@Resultado VARCHAR(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CharInvalido SMALLINT
SET @CharInvalido = PATINDEX('%[^0-9]%', @Resultado)
WHILE @CharInvalido > 0
BEGIN
SET @Resultado = STUFF(@Resultado, @CharInvalido, 1, '')
SET @CharInvalido = PATINDEX('%[^0-9]%', @Resultado)
END
SET @Resultado = @Resultado
RETURN @Resultado
END
Select dbo.TiraLetras('AB12CD34%¨&*(56')
Resultado: '123456'
Select dbo.TiraLetras('95.012-500') 'CEP'
Resultado: '95012500'