Ir para conteúdo

POWERED BY:

Arquivado

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

arglas

Converter campo VARCHAR para lista de NUMERIC

Recommended Posts

Boa tarde pessoal,

 

alguém aqui tem idéia de como eu posso fazer pra converter um campo do tipo varchar assim: '4553,56765,0,33211' para uma lista de NUMERIC, como fosse em um "where CODIGO IN (4553,56765,0,33211)"

 

Será que eu fui claro? Sou horrível pra explicar o que eu preciso :(

 

Abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

já é um começo:

 

declare @tabela table (codigo varchar(20))
declare @dados table (codigo numeric)

insert into @tabela values ('4553,56765,0,33211')

insert into @dados values (4553)
insert into @dados values (0)

select * from @tabela
select * from @dados

select substring(codigo,1,(charindex(',',codigo)-1)) from @tabela

 

Estou sem ambiente para teste, fiz isso de cabeça. Veja se funciona :P

 

Abçs

 

[/size]

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Massa, obrigado pela força!

 

Mas do jeito que você me passou ele consegue pegar apenas o primeiro intervalo, até a próxima vírgula no caso. Não sei como teria que ser feito para que eu conseguisse ler todos os outros seguintes. Na verdade nem sei se isso é possível!

 

Abrasss!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Massa, obrigado pela força!

 

Mas do jeito que você me passou ele consegue pegar apenas o primeiro intervalo, até a próxima vírgula no caso. Não sei como teria que ser feito para que eu conseguisse ler todos os outros seguintes. Na verdade nem sei se isso é possível!

 

Abrasss!

 

Foi a alternativa que consegui fazer de cabeça.

Estava com um problema parecido com o seu:

precisava separar os campos que vinham com separador virgula. vinham todos juntos e precisava deles separados. Com a ajuda de um amigo e um pouco de persistencia consegui isso:

 

if object_id ('tempdb..#dados') is not null
begin
drop table #dados
end

declare @tabela table (codigo varchar(20))

declare @InString varchar(max)
, @Delim char(1) 
, @CR varchar(1)
, @LF varchar(1) 
, @Pos int, @Pattern char(3) 
, @Token varchar(30) 
, @sql varchar(max) 


create table #dados (codigo numeric)

insert into @tabela values ('4553,56765,0,33211')

insert into #dados values (4553)
insert into #dados values (0)

----select * from @tabela
----select * from #dados


BEGIN 

select @InString = codigo, @Delim = ',' from @tabela


Set @CR = char(10) 
Set @LF = char(13) 

If @InString is null return 

Set @Pattern = '%' + @Delim + '%' 


SELECT @InString = @InString + @Delim 
SELECT @Pos = PATINDEX(@Pattern, @InString) 


-- select @sql ='select '
select @sql =''
     WHILE (@Pos <> 0) BEGIN 

           SELECT @Token = ltrim(rtrim(SUBSTRING(@InString, 1, @Pos - 1))) 
           Select @Token = replace(@Token, @CR, '') 
           Select @Token = replace(@Token, @LF, '') 

           SELECT @InString = STUFF(@InString, 1, PATINDEX(@Pattern, @InString),'') 
           SELECT @Pos = PATINDEX(@Pattern, @InString) 

           select @sql = @sql +  ''''+@Token+'''' + (select case when @Pos <> 0 then ',' else '' end)

     END 

set @sql = 'select * from #dados where codigo in (' + @SQL +')'
-- select (@SQL)
exec( @sql)

END




 

Disso voce pode montar uma função.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Disso voce pode montar uma função.

 

opa, tá pronta: http://geekswithblog.../12/111504.aspx :P

 

abs

 

 

uiaaaaaa... daqui do trampo nao tenho acesso, somente pelo "cache do google", mas gostei do que li :P

rapido no gatilho como sempre hehehehe

 

Abçs e obrigado :devil:

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.