Atualização na coluna Endereço

18/07/2007

0

Bom dia pessoal,
Estou com uma duvida na qual necessito de ajuda.

Tenho uma coluna chamada ds_endereco e outra coluna chamda ds_numero.

O problema que esta acontecendo é o seguinte:

Muitos dos cadastros estão com os numeros preenchidos no campo ds_endereco como segue exemplo abaixo:

Estrada das palmeira,97.

Nesse mesmo cadastro a coluna numero esta nulo.. devido ao preenchimento dele no endereço.

O que necessito é pegar esses numeros e inserir na coluna Numero..

Qual o melhor filtro e como tirar ele da coluna endereço e mandar na coluna numero..

Será que devo mandar no filtro algo como SUBSTRING, se for isso a maioria dos cadastros não contém uma posição exata..

Conto com a ajuda de todos..

Abraços...

Obs: Estou utilizando SQL SERVER 2000.


Flasp2000

Flasp2000

Responder

Posts

18/07/2007

Psergio.p

Teriamos que encontrar um padrão, talvez pegar somente a parte numerica...não sei...tem que analisar melhor!

Se puder me mandar a tabela em formato texto eu dou uma olhada!


Responder

18/07/2007

Flasp2000

Então velhinho, o problema não é esse, acho que alguns acertos com REPLACE E SUBSTRING, eu consigo entrar no padrão...


Apenas quero saber como faço a rotina de select com insert.. Procedure. trigger, sei lá isso que quero saber... aí monto na estrutura...

Como pego os numeros apenas com (INT)???

Como insirir eles de uma coluna pra outra... São essas minha duvidas apenas...


Responder

18/07/2007

Flasp2000

Então velhinho, o problema não é esse, acho que alguns acertos com REPLACE E SUBSTRING, eu consigo entrar no padrão... Apenas quero saber como faço a rotina de select com insert.. Procedure. trigger, sei lá isso que quero saber... aí monto na estrutura... Como pego os numeros apenas com (INT)??? Como inserir eles de uma coluna pra outra... São essas minha duvidas apenas...



Responder

19/07/2007

Psergio.p

Estou te mandando um script T-SQL para te ajudar, se você não entender o que eu fiz posta novamente a msg. []s

CREATE TABLE TESTE_STR
(CODID INT NOT NULL PRIMARY KEY IDENTITY,
ENDERECO VARCHAR(50),
NUMERO INT)
GO

INSERT INTO TESTE_STR VALUES(´BLA BLA BLA, 45´,NULL)
INSERT INTO TESTE_STR VALUES(´BLA BLA BLA 45´,NULL)
INSERT INTO TESTE_STR VALUES(´Rua BLA BLA BLA - 45´,NULL)
GO

CREATE FUNCTION DBO.GETNUMERO(@ENDER VARCHAR(50))
RETURNS INT AS
BEGIN
DECLARE @END INT
DECLARE @STRNUM VARCHAR(10)

SET @END = 1
SET @STRNUM = ´´

WHILE @END <= LEN(@ENDER) BEGIN
IF SUBSTRING(@ENDER,@END,1) NOT IN(´,´,´-´)
AND ISNUMERIC(SUBSTRING(@ENDER,@END,1)) = 1 BEGIN
SET @STRNUM = @STRNUM + SUBSTRING(@ENDER,@END,1)
END
SET @END = @END + 1
END
RETURN CONVERT(INT,@STRNUM)
END
GO

UPDATE TESTE_STR SET NUMERO = (SELECT DBO.GETNUMERO(ENDERECO) FROM TESTE_STR TSTR
WHERE TSTR.CODID = TESTE_STR.CODID)


Responder

19/07/2007

Flasp2000

Poderia me ajudar melhor velhinho, colocar comentários, eu não entendí rs....

Por exemplo, eu poderia tratar esses dados em uma tabela virtual... como faço ???

So ainda leigo na parada.. to entrando de cabeça nisso..


Obs: Desculpa incomodar. mas preciso mesmo disso cara..

Abraços.. e muito obrigado pela ajuda inicial.


Responder

19/07/2007

Emerson Nascimento

baseado na dica do nosso colega [b:6f2a408a33]psergio.p[/b:6f2a408a33], fiz essa adaptação por dois motivos:
1. na função passada, se fosse indicado como endereço: ´Rua 25 de Março, 135´, o número retornado seria 25.135 o que, obviamente, está errado
2. era preciso retornar também o endereço sem o número informado para o campo endereco

por conta disso, criei essas duas funções:
CREATE FUNCTION DBO.GETENDERECO(@ENDER VARCHAR(100))
RETURNS VARCHAR(100) AS
BEGIN
DECLARE @END INT
DECLARE @ENDERECO VARCHAR(100)

SET @END = LEN(@ENDER)
SET @ENDERECO = ´´

WHILE @END >= 1 BEGIN
IF SUBSTRING(@ENDER,@END,1) IN(´,´,´-´,´ ´) BEGIN
SET @ENDERECO  = SUBSTRING(@ENDER,1,@END-1)
SET @END = 1
END
SET @END = @END - 1
END

IF RIGHT(@ENDERECO, 1) IN (´,´,´-´,´ ´) 
SET @ENDERECO  = SUBSTRING(@ENDERECO, 1, LEN(@ENDERECO)-1)

RETURN @ENDERECO
END


e
CREATE FUNCTION DBO.GETNUMERO(@ENDER VARCHAR(100))
RETURNS VARCHAR(5) AS
BEGIN
DECLARE @END INT
DECLARE @STRNUM VARCHAR(10)

SET @END = LEN(@ENDER)
SET @STRNUM = ´´

WHILE @END >= 1 BEGIN
IF SUBSTRING(@ENDER,@END,1) IN(´,´,´-´,´ ´) BEGIN
SET @STRNUM = SUBSTRING(@ENDER,@END+1,LEN(@ENDER))
SET @END = 1
END
SET @END = @END - 1
END
RETURN @STRNUM
END

dessa forma o update seria:
UPDATE SUA_TABELA SET
ds_NUMERO = dbo.GetNumero(CAMPO_ENDERECO),
ds_ENDERECO = dbo.GetEndereco(CAMPO_ENDERECO)
WHERE ds_NUMERO IS NULL

note que a função GetNumero retorna o número como varchar. se esse não for o tipo correto, faça a conversão como foi mostrado na função do [b:6f2a408a33]psergio.p[/b:6f2a408a33].

obs.: não fiz a conversão do numero parao tipo inteiro porque pode haver algum numero 25A ou coisa parecida.


Responder

19/07/2007

Psergio.p

Legal Emerson, ficou bem legal!

Na verdade montei esta função apenas para dar uma luz ao nosso amigo!
Más vejo que agora você matou a pau o problema dele!


Responder

19/07/2007

Flasp2000

Caros colegas,

Estarei tentando executar o script, como ainda sei muita pouca coisa rs.. quando lí fiquei até que apavorado... estarei tentando decifrar rs...

Aproveitando o momento, vcs conhecem algum curso aki em são paulo... Gostaria de estar estudando mais o assunto de banco.. se conseguirem me passar algumas dicas agradeço..

meu msn é flavinho88@hotmail.com e/ou e-mail flasp2000@gmail.com

Muito obrigado!


Responder

19/07/2007

Psergio.p

Acho que um bom livro de SQL Server pode te ajudar além de ler regularmente a SQL Magazine :)


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar