Array
(
)

Atualização na coluna Endereço

Flasp2000
   - 18 jul 2007

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.

Psergio.p
   - 18 jul 2007

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!

Flasp2000
   - 18 jul 2007

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

Flasp2000
   - 18 jul 2007


Citação:
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...


Psergio.p
   - 19 jul 2007

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)

Flasp2000
   - 19 jul 2007

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.

Emerson
   - 19 jul 2007

baseado na dica do nosso colega psergio.p, 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:
#Código

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
#Código
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:
#Código
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 psergio.p.

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

Psergio.p
   - 19 jul 2007

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!

Flasp2000
   - 19 jul 2007

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!

Psergio.p
   - 19 jul 2007

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