Ir para conteúdo

Arquivado

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

AlessandrodeMatos

Parte de String

Recommended Posts

6709	2013-01-01 18:11:40.017	20	196439	0	?? ????(0x679a) (234, 85)	[My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin]

eu precisava que ele pegasse o His(Scarkket), como faria isso pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize uma ou mais das FUNCTIONS que manipulam STRINGS.

 

http://msdn.microsoft.com/en-us/library/ms181984.aspx

 

http://sqlservercodebook.blogspot.com.br/2008/03/sql-string-functions-tutorial.html

 

Não passou maiores detalhes da formação do que quer ser obtido, mas em geral estas funções resolvem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize uma ou mais das FUNCTIONS que manipulam STRINGS.

 

http://msdn.microsoft.com/en-us/library/ms181984.aspx

 

http://sqlservercodebook.blogspot.com.br/2008/03/sql-string-functions-tutorial.html

 

Não passou maiores detalhes da formação do que quer ser obtido, mas em geral estas funções resolvem.

 

Mota é o seguinte , eu tenho uma procedure que salva os logs em uma tabela ,

eu faria o seguinte , pegaria essa variavel da procedure e colocaria pra salvar em outra tabela, mais teria que ser o que está dentro do parenteses "His()" isso que está dentro dele pode variar até 12 caracters e não tem como eu saber de forma certa quantos caracters vao entrar ali porque se não eu colocaria um SUBSTRING.

 

desculpa se fui meio rude na resposta :S

 

 

declare @strDesc varchar(128)
declare @conta int
set @strDesc = '[My: no job, Neutral, Kirin] [His(TestRename): no job, Neutral, Kirin]'
set @conta = LEN(@strDesc)
set @strDesc = SUBSTRING(@strDesc,-25,@conta)
set @strDesc = SUBSTRING(@strDesc,35,@conta)
--Select RIGHT (@strDesc,26)
select @conta
select @strDesc

 

Isso resolveu uma parte :), muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

CHARINDEX ('His(','6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin')

 

retorna a posição que o "His(" começa na string

 

usando o RIGHT pegue o que vem depois do "His("

 

usando o PATINDEX ache o primeiro branco " " que indica o fim do "His("

Compartilhar este post


Link para o post
Compartilhar em outros sites

CHARINDEX ('His(','6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin')

 

retorna a posição que o "His(" começa na string

 

usando o RIGHT pegue o que vem depois do "His("

 

usando o PATINDEX ache o primeiro branco " " que indica o fim do "His("

 

na minha query ele tem um problema,

as vezes o testo varia a parte final

[My: no job, Neutral, Kirin] [His(TestRename): no job, Neutral, BackHo]

como faria pra adaptar a minha query?

Compartilhar este post


Link para o post
Compartilhar em outros sites

retorna a posição que o "His(" começa na string

 

usando o RIGHT pegue o que vem depois do "His("

 

usando o PATINDEX ache o primeiro branco " " que indica o fim do "His("

 

Usando o RIGHT pegue o "His(" até o primeiro branco após o "His("

Compartilhar este post


Link para o post
Compartilhar em outros sites

retorna a posição que o "His(" começa na string

 

usando o RIGHT pegue o que vem depois do "His("

 

usando o PATINDEX ache o primeiro branco " " que indica o fim do "His("

 

Usando o RIGHT pegue o "His(" até o primeiro branco após o "His("

 

O SQL RETORNOU

Msg 102, Level 15, State 1, Line 1

Incorrect syntax near 'His('.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica o sql e a descrição da tabela.

USE [LOG_DB]
GO
/****** Object:  StoredProcedure [dbo].[_AddLogChar]    Script Date: 01/05/2013 21:03:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER   procedure [dbo].[_AddLogChar] 
@CharID		int,
@EventID		tinyint,
@Data1		int,
@Data2		int,
@strPos		varchar(64),
@Desc		varchar(128)
as
declare @len_pos 	int
declare @len_desc	int
set @len_pos = len(@strPos)
set @len_desc = len(@Desc)
if (@len_pos > 0 and @len_desc > 0)
begin	
	insert _LogEventChar values(@CharID, GetDate(), @EventID, @Data1, @Data2, @strPos, @Desc)	
end
else if (@len_pos > 0 and @len_desc = 0)
begin 	
	insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2, EventPos) values(@CharID, GetDate(), @EventID, @Data1, @Data2, @strPos)
end
else if (@len_pos = 0 and @len_desc > 0)
begin 	
	insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2, strDesc) values(@CharID, GetDate(), @EventID, @Data1, @Data2, @Desc)
end
else
begin
	insert _LogEventChar (CharID, EventTime, EventID, Data1, Data2) values(@CharID, GetDate(), @EventID, @Data1, @Data2)
end
if(@EventID = 20)
	begin
declare @conta int
declare @strVerifMe varchar(128)
declare @charLoster varchar(128)
set @strVerifMe = SUBSTRING(@Desc,0,21)
set @conta = LEN(@Desc)
set @Desc = SUBSTRING(@Desc,-25,@conta)
set @Desc = SUBSTRING(@Desc,35,@conta)
if(@strVerifMe = '[My: no job, Neutral')
begin
set @charLoster  = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WHERE CharID = @CharID)
INSERT INTO _LogPvP (CharWinner, CharLost, Data) values (@Desc, @charLoster, GetDate())
end

end

 

 

DESCRIÇÂO DA TABELA

 

ID, CharWinner, CharLost, Data

 

Eu gostaria de fazer o seguinte ali tbm

adicionar essa linha abaixo do @charLoster

para verificar se a quantidade de vezes que o char ganhou ou perdeu do mesmo é maior ou igual a 3 se for ele n é pra adicionar a tabela

 

Teria como fazer o seguinte?

Resgatar os 3 ultimos registros do CharLost Apartir do CharWinner , para vericar se algum deles bate com o char que perdeu que no caso seria o charloster

 

set @conta = (SELECT CharWinner FROM _LogPvP WHERE CharWinner = @Desc AND CharLost LIKE '%'+@charLoster+'%' ORDER BY ID DESC)

 

se ficou meio confuso só falar que eu tento arrumar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tinha entendido que sua dúvida era como obter parte de uma string dentro de outra string.

 

para verificar se a quantidade de vezes que o char ganhou ou perdeu do mesmo é maior ou igual a 3 se for ele n é pra adicionar a tabela

 

DESCRIÇÂO DA TABELA

ID, CharWinner, CharLost, Data

 

Como saber se ganhou eu perdeu pelos campos CharWinner e CharLost ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tinha entendido que sua dúvida era como obter parte de uma string dentro de outra string.

 

 

 

DESCRIÇÂO DA TABELA

ID, CharWinner, CharLost, Data

 

Como saber se ganhou eu perdeu pelos campos CharWinner e CharLost ?

o parametro CharID que vem da procedure é o char que perdeu, @Desc no caso o que tem o His() é o char que ganhou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe mais uma vez, os dados não vem da tabela ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá que eu me perdi :)

 

Para pegar a parte da string creio que seja

 

Select CHARINDEX ('His(','6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin]')

 

A partir daí

 

Select SUBSTRING('6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin]',
                CHARINDEX ('His(','6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin]'),
                length(''His(','6709    2013-01-01 18:11:40.017 20      196439  0       ?? ????(0x679a) (234, 85)       [My: no job, Neutral, Kirin] [His(Scarllet): no job, Neutral, Kirin]'))

 

aqui deve sobrar '[His(Scarllet): no job, Neutral, Kirin]'

para simplificar vou aur este pedaço apenas

 

ache o primeiro branco desta string que sobrou

 

Select CHARINDEX (' ','[His(Scarllet): no job, Neutral, Kirin]')

 

Pegue do inicio até o primeiro branco

 

Select SUBSTRING ('[His(Scarllet): no job, Neutral, Kirin]',
                 1,
                 CHARINDEX (' ','[His(Scarllet): no job, Neutral, Kirin])

 

Deverá sobrar '[His(Scarllet): '

 

Era este o problema ?

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.