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'
Em Oracle é bem mais simples:
ResponderExcluirselect regexp_replace('01/(234)M?56.78-90a', '[[:punct:]]|[[:alpha:]]') cep from dual;
retorna um string:
CEP
-----------
01234567890
Por isso que dba slqserver tem o raciocínio logico muito melhor.
Excluirdesnecessário...
ExcluirObrigado!!! ja estamos em 2020 e a informação continua sendo muito util!!!
ExcluirCESAR BLUMM, MUITO LEGAL ESSA ROTINA EM SQL SERVER, SALVOU MINHA VIDA RSRS, PRECISAVA CORRIGIR TELEFONES E ELA CAIU COMO UMA LUVA.
ResponderExcluirShow !
ResponderExcluirMuito Bom!
ResponderExcluirselect regexp_replace('01/(234)M?56.78-90a', '[[:punct:]]|[[:alpha:]]') cep from dual;
Show de bola, eu precisava fazer uma consulta removendo mascara de telefones e me atendeu muito bem ;)
ResponderExcluir