Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mangaba

Tratamento de string

Recommended Posts

Tenho uma tabela "a" com apenas um campo tipo texto com no máximo 70 posições.

Quero, a partir desta tabela, criar uma outra tabela "b" formada por diversos campos que correspondem à frações de cada campo da tabela "a" que são delimitadas por "|".

Por exemplo:

tenho a tabela "a" - registro 1 - campo único -> |maria do carmo|9645|rua pedro da cunha|10|bairro novo|curitiba|pr|...

 

... Quero na tabela "b" - registro 1 - campos:

nome: maria do carmo

matricula: 9645

endereço: rua pedro da cunha

nr: 10

bairro: bairo novo

cidade: curitiba

uf: pr

 

pergunto: que comando sql devo usar para identificar o limitador "|" e separar o conteúdo do referido campo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, voce deve fazer isto dentro de uma store procedure.

 

pega o valor do campo e comeca a comparar caractere por caractere

quanto for igual a "|" voce joga para uma variavel. e assim vai.

 

abracao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é bem isso que o Karepa falou, eu fiz algo semelhante, mas todo o conteúdo da string era constituído de um campo chave de uma determinada tabela.

 

o que eu fiz foi separá-los e inserí-los em uma tabela temporária para poder fazer um JOIN direto depois.

 

DECLARE @pos_ini INT
	  , @pos_atu INT
	  , @pos_fim INT
	  , @string  VARCHAR(10)

SET @pos_ini = 1;
SET @pos_atu = 0;
SET @pos_fim = LEN(<REGISTRO ORIGINAL>);

WHILE (@pos_ini <= @pos_fim)
   BEGIN
	  SET @pos_atu = CHARINDEX('|', @i_lojas, @pos_ini);
	  SET @string = SUBSTRING(@i_lojas, @pos_ini, @pos_atu - @pos_ini);

	  INSERT #TABELA_TEMPORARIA VALUES (@string);

	  SET @pos_ini = @pos_atu + 1;
   END;

se você tem os campos definidos, sempre a mesma quantidade, nunca faltando nenhum, uma solução simples é criar uma variável para cada campo e fazer uma rotina simples onde cada campo é extraído individualmente. para saber a posição do "|" é só usar o CHARINDEX como usei acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.