Quantcast
Channel: SQL Server – Leandro Ribeiro
Viewing all articles
Browse latest Browse all 15

Script – PATINDEX

$
0
0

Olá pessoal.

Quem nunca teve um cadastro de funcionários, cliente ou alunos com informações armazenados na coluna errada…

No trabalho, tivemos que gerar um arquivo com o cadastro dos funcionários e nos deparamos com os números do endereço armazenados na coluna de endereço. A coluna número havia sido ignorada.

Para separar estes dados a fim de atender o layout proposto, utilizei a função PATINDEX.

Esta função nos permite usar caracteres curingas para pesquisar sua posição inicial dentro de uma expressão.
Em nosso caso, usamos o curinga %[0-9]% para retornar a posição inicial na coluna de endereço ao encontrar números de 0 a 9.

Exemplificando:

IF OBJECT_ID('tempdb..#FUNCIONARIO') IS NOT NULL
DROP TABLE #FUNCIONARIO
GO

CREATE TABLE #FUNCIONARIO
	(MAT_FUNCIONARIO INT IDENTITY(1,1) PRIMARY KEY,
	 NOM_FUNCIONARIO VARCHAR(50) NOT NULL,
	 END_FUNCIONARIO VARCHAR(50) NOT NULL)

INSERT INTO #FUNCIONARIO VALUES ('JOAO AUGUSTO JR.','AV. MARCOS BARROS 28')
INSERT INTO #FUNCIONARIO VALUES ('MARIA AUGUSTA SANTOS','RUA YPIRANGA 1189')
INSERT INTO #FUNCIONARIO VALUES ('HELENO DE FREITAS','TRAVESSA RICARDO MACHADO 766')
INSERT INTO #FUNCIONARIO VALUES ('LUCAS MORAES DE ANDRADA','AVENIDA RIO BRANCO 11555')
INSERT INTO #FUNCIONARIO VALUES ('DAIANE DA SILVA','RUA VINTE E CINCO DE AGOSTO, 663')
INSERT INTO #FUNCIONARIO VALUES ('GUILHERME DA CUNHA','RUA LUIZA')
Cadastro de funcionários

Cadastro de funcionários

Utilizando a função PATINDEX

SELECT
    MAT_FUNCIONARIO,
    NOM_FUNCIONARIO,
    CASE
        WHEN PATINDEX('%[0-9]%',END_FUNCIONARIO) > 0
        THEN SUBSTRING(END_FUNCIONARIO,0,PATINDEX('%[0-9]%',END_FUNCIONARIO))
        ELSE END_FUNCIONARIO
    END END_FUNCIONARIO,
    CASE
        WHEN PATINDEX('%[0-9]%',END_FUNCIONARIO) > 0
        THEN SUBSTRING(END_FUNCIONARIO,PATINDEX('%[0-9]%',END_FUNCIONARIO),LEN(END_FUNCIONARIO))
        ELSE ''
    END NUM_ENDERECO
FROM #FUNCIONARIO
Usando a função PATINDEX

Usando a função PATINDEX

Espero que este post lhe seja útil.

Até o próximo post.


Viewing all articles
Browse latest Browse all 15