Usuário com melhor resposta
Manipulação de string

Pergunta
-
Pessoal, boa tarde.
Tenho uma tabela com o nome do campo ItPedVendaDescrProdAlt. É um campo que o usuário preenche da seguinte forma:
MAGMA COMM
SPECTRUS COMM
TYPHOON BORDEAUX FIRST
DELICATUS STDEu preciso fazer uma programação que ele pegue apenas os nomes COMM, FIRST, STD de cada linha, pensei em usar o substring, mas as posições nunca serão as mesmas. Alguém pode me ajudar?
select ipv.ItPedVendaDescrProdAlt, isnull(ipv.ItPedVendaDescrProdAlt, ''),
cast (isnull(ipv.ItPedVendaDescrProdAlt, '') as varchar(10)),
len(cast(isnull(ipv.ItPedVendaDescrProdAlt, '') as varchar(10))),
len(cast(isnull(ipv.ItPedVendaDescrProdAlt, '') as varchar(10))) -6,
right(len(cast(isnull(ipv.ItPedVendaDescrProdAlt, '') as varchar(10))) -6,4)
--left(cast( isnull (ipv.ItPedVendaDescrProdAlt,' ') as varchar),len( cast( isnull(ipv.ItPedVendaDescrProdAlt,' ') as varchar)) - 6) as 'QTDS'
from ITEM_PED_VENDA ipv
Respostas
-
boa tarde Molombito !
Em todos os registros terá 1 destes casos (COMM, FIRST, STD ) ? serão somente estes ? eles sempre estarão por ultimo ? se sim, faça como abaixo, onde faço um case verificando qual a ultima letra e atribuo de acordo com as 3 palavras:
create table #teste (coluna varchar(100)) insert into #teste select 'MAGMA COMM' insert into #teste select 'SPECTRUS COMM' insert into #teste select 'TYPHOON BORDEAUX FIRST' insert into #teste select 'DELICATUS STD' select [campo] = case when RIGHT(coluna,1) = 'M' then 'COMM' when RIGHT(coluna,1) = 'T' then 'FIRST' when RIGHT(coluna,1) = 'D' then 'STD' end from #teste
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49
-
Se estas "linhas" forem realmente em registros diferentes, aí dá pra fazer facilmente, independente da palavra final.
Vejam:
Declare @Tabela Table (ItPedVendaDescrProdAlt Text) Insert Into @Tabela Values ('MAGMA COMM'), ('SPECTRUS COMM'), ('TYPHOON BORDEAUX FIRST'), ('DELICATUS STD'), ('ROBERSON FERREIRA'), ('ALEXANDRE MATAYOSI') Select Reverse( Left( Reverse(Convert(VarChar(8000), ItPedVendaDescrProdAlt)), CharIndex(' ', Reverse(Convert(VarChar(8000), ItPedVendaDescrProdAlt))) ) ) From @Tabela
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49
-
Deu certo!!!
Obrigado a todos!!!
(select top 1 case when RIGHT (cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'M' then 'COMM'
when RIGHT(cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'T' then 'FIRST'
when RIGHT(cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'D' then 'STD' end
from ITEM_PED_VENDA ipvv where ipvv.EmpCod = ipv.EmpCod and ipv.PedVendaNum = ipvv.PedVendaNum)- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49
Todas as Respostas
-
Rapaz, isso vai dar um trabalho pra fazer em, T-SQL.
De que forma você quer resgatar essas informações? Uma embaixo da outra, uma do lado da outra...?
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
boa tarde Molombito !
Em todos os registros terá 1 destes casos (COMM, FIRST, STD ) ? serão somente estes ? eles sempre estarão por ultimo ? se sim, faça como abaixo, onde faço um case verificando qual a ultima letra e atribuo de acordo com as 3 palavras:
create table #teste (coluna varchar(100)) insert into #teste select 'MAGMA COMM' insert into #teste select 'SPECTRUS COMM' insert into #teste select 'TYPHOON BORDEAUX FIRST' insert into #teste select 'DELICATUS STD' select [campo] = case when RIGHT(coluna,1) = 'M' then 'COMM' when RIGHT(coluna,1) = 'T' then 'FIRST' when RIGHT(coluna,1) = 'D' then 'STD' end from #teste
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49
-
Outra pergunta: estas informações ficam em registros diferentes? Se for, é tranquilo de fazer.
Ou ficam num único registro, separados por Enter, num campo Text?
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
Boa tarde,
Experimente desta forma:
SELECT case when CHARINDEX(' ', ItPedVendaDescrProdAlt) > 0 then RIGHT(ItPedVendaDescrProdAlt, CHARINDEX(' ', REVERSE(ItPedVendaDescrProdAlt) ) - 1) else ItPedVendaDescrProdAlt end as Descricao FROM --...
Espero que seja útil.
Assinatura: http://www.imoveisemexposicao.com.br
-
Se estas "linhas" forem realmente em registros diferentes, aí dá pra fazer facilmente, independente da palavra final.
Vejam:
Declare @Tabela Table (ItPedVendaDescrProdAlt Text) Insert Into @Tabela Values ('MAGMA COMM'), ('SPECTRUS COMM'), ('TYPHOON BORDEAUX FIRST'), ('DELICATUS STD'), ('ROBERSON FERREIRA'), ('ALEXANDRE MATAYOSI') Select Reverse( Left( Reverse(Convert(VarChar(8000), ItPedVendaDescrProdAlt)), CharIndex(' ', Reverse(Convert(VarChar(8000), ItPedVendaDescrProdAlt))) ) ) From @Tabela
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49
-
Molombito,
Senão entendi errado, seria o caso de utilizar o Like em conjunto com alguns Unions, veja o exemplo abaixo:
create table #teste (coluna varchar(100)) insert into #teste select 'MAGMA COMM' insert into #teste select 'SPECTRUS COMM' insert into #teste select 'TYPHOON BORDEAUX FIRST' insert into #teste select 'DELICATUS STD' Select * from #Teste Where Coluna Like ('%COMM%') Union Select * from #Teste Where Coluna Like ('%FIRST%') Union Select * from #Teste Where Coluna Like ('%STD%') ORDER BY COLUNA
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
-
Então essas linhas que você colocou como exemplo ficam num único registro, cuja coluna é do tipo text???
(Responda as outras perguntas por favor.)
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
-
-
Deu certo!!!
Obrigado a todos!!!
(select top 1 case when RIGHT (cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'M' then 'COMM'
when RIGHT(cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'T' then 'FIRST'
when RIGHT(cast(ipvv.ItPedVendaDescrProdAlt as varchar),1) = 'D' then 'STD' end
from ITEM_PED_VENDA ipvv where ipvv.EmpCod = ipv.EmpCod and ipv.PedVendaNum = ipvv.PedVendaNum)- Marcado como Resposta Molombito quinta-feira, 25 de outubro de 2012 19:49