domingo, 7 de novembro de 2010

Function - Retira Letras/Números

Fiz uma function abaixo, que retira os numeros ou as letras de um campo string.. por exemplo o integrachave....

Exemplo:

-- TRAZER SOMENTE OS NUMEROS DE UM CAMPO
SELECT dbo.FNC_RETIRALETRANUM('FABIOFUMIO1978','N')
FROM GCOLIGADA
go

-- TRAZER SOMENTE AS LETRAS DE UM CAMPO
SELECT dbo.FNC_RETIRALETRANUM('FABIOFUMIO1978','N')
FROM GCOLIGADA
go

Com isso não precisa-se tratar os campos do INTEGRACHAVE da CLANCA...
Exemplo:

SELECT dbo.FNC_RETIRALETRANUM(INTEGRACHAVE,'N')
FROM CLANCA
go

Script de criação:

CREATE FUNCTION dbo.FNC_RETIRALETRANUM (@TEXTO VARCHAR(255), @FUNCAO VARCHAR(1))
RETURNS VARCHAR(255)
AS
BEGIN
-- RETIRAR CARACTERES/NUMEROS
DECLARE @TAMTEXTO INT,
@NOVOTEXTO VARCHAR(255),
@CONTADOR INT

SET @TAMTEXTO = LEN(@TEXTO)
SET @NOVOTEXTO = ''
SET @CONTADOR = 1

BEGIN
IF @FUNCAO = 'L' -- LETRAS
BEGIN
WHILE @CONTADOR <= @TAMTEXTO BEGIN IF SUBSTRING(@TEXTO,@CONTADOR,1) NOT IN ('1','2','3','4','5','6','7','8','9','0','!','@','#','$','%','¨','&','*','(',')', '+','=','-','\','<','>',':'';','?','/','|','[',']','{','}')
BEGIN
SET @NOVOTEXTO = @NOVOTEXTO + SUBSTRING(@TEXTO, @CONTADOR, 1)
END
SET @CONTADOR = @CONTADOR+1
END
END

IF @FUNCAO = 'N' -- NÚMEROS
BEGIN
WHILE @CONTADOR <= @TAMTEXTO
BEGIN
IF SUBSTRING(@TEXTO,@CONTADOR,1) IN ('1','2','3','4','5','6','7','8','9','0')
BEGIN
SET @NOVOTEXTO = @NOVOTEXTO + SUBSTRING(@TEXTO, @CONTADOR, 1)
END
SET @CONTADOR = @CONTADOR+1
END
END
RETURN (@NOVOTEXTO)
END
END