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')
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
Espero que este post lhe seja útil. Até o próximo post.
