Ir para conteúdo

Arquivado

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

EduFranzoni

Atualizar coluna, dependendo da posição do caracter

Recommended Posts

Pessoal, é o seguinte, preciso pegar um pedaço de uma coluna, e inserir em outra coluna, o problema é que esse pedaço varia de tamanho, de acordo com o nome do usuário contido na menssagem.

 

segue como a tabela está no momento.

idLog nmMensagem nrIP dtCadastro nmUsuario

1799 Usuário admin inseriu a categoria ID = 85 # 127.0.0.1 2010-08-20 18:44:52.400 admin inseriu

 

O que quero fazer é pegar o nome do usuário na coluna nmMensagem, no exemplo acima ADMIN e inserir na coluna nmUsuario.

 

O comando que utilizei está pegando mais do que o nome, e se eu diminuo o número "9" do meu comando acaba cortando alguns usuários com nomes maiores.

UPDATE tabLogUsuario  
SET nmUsuario = SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9))  
WHERE idLog IN (SELECT idLog FROM tabLogUsuario)  

 

O que eu posso fazer, me ajudem plz.

 

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

na coluna nmMensagem a palavra Usuário eh fixa???

 

Sim, Usuário NOME_DO_USUÁRIO AÇÃO_DO_USUÁRIO

 

o que varia, é o nome_do_usuário e a ação do usuário, quero pegar somente o nome do usuário e passar para uma nova coluna

 

ltrim(rtrim(SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9)-8)))

 

Fábio, se não for pedir mais onde devo usar esse conteúdo que você passou?

 

obrigado

 

ltrim(rtrim(SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9)-8)))

 

executei dessa meneira:

UPDATE tabLogUsuario  
SET nmUsuario = ltrim(rtrim(SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9)-8)))
WHERE idLog IN (SELECT idLog FROM tabLogUsuario) 

 

e aconteceu o seguinte erro:

 

Mensagem 537, Nível 16, Estado 4, Linha 1

Parâmetro de comprimento inválido passado para a função LEFT ou SUBSTRING.

A instrução foi finalizada.

 

tentei rodar o seguinte codigo

 

UPDATE tabLogUsuario  
SET nmUsuario = LTRIM(RTRIM(SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9)))) 
WHERE idLog IN (SELECT idLog FROM tabLogUsuario)

 

repare que tirei o "-8"

 

mas ai ele continua pegando mais que só o nome do usuário!

 

 

Me ajudem plz

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu codigo está certo. o problema é que você deve ter dados menores ou vazios.

tente isso a baixo. Se funcionar é porque você tem algum conteúdo que não bate com o que você passou para gente.

 

 

UPDATE tabLogUsuario

SET nmUsuario = ltrim(rtrim(SUBSTRING(nmMensagem, 8, CHARINDEX(' ', nmMensagem, 9)-8)))

WHERE idLog IN (SELECT idLog FROM tabLogUsuario where len(nmMensagem) > 9 and nmMensagem like '% %')

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.