Script – PATINDEX

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.
Advertisements

2 thoughts on “Script – PATINDEX

  1. Pingback: Funcões e Procedures auxiliares no SQL SERVER | Alex Souza

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s