[Ajuda] Substring SQL Server 2000

Alguem me consegue ajudar com isto? como é que posso colocar na query acima, uma condição para que quando detectar o caractere terminador não dê erro.

cumps!
 
Boas.

Nunca vi nem ouvi falar de caracteres terminadores em sql. Se puderes mete lá aí uns exemplos do texto original que é guardado no campo mMsgContent.
 
Boas.

Nunca vi nem ouvi falar de caracteres terminadores em sql. Se puderes mete lá aí uns exemplos do texto original que é guardado no campo mMsgContent.


O texto Original, é algo deste Genero:

Envio de um Ficheiro SAT pela empresa XPTO com o
contrato XPTO nº 123456 para o dia 2006.12.29.
Nome Ficheiro: 83762527_0010.0017208267_1167319686488_1853768
Total Registos: 77
Valor Total: 54497.11
Conta: 1234567890


Cumps!
 
Última edição:
O texto Original, é algo deste Genero:

Envio de um Ficheiro SAT pela empresa XPTO com o
contrato XPTO nº 123456 para o dia 2006.12.29.
Nome Ficheiro: 83762527_0010.0017208267_1167319686488_1853768
Total Registos: 77
Valor Total: 54497.11
Conta: 1234567890

Cumps!

O caractere terminador, pode ser por exemplo um \n (newline) colocado a seguir ao último valor do Total Registos.

Agora não sei é como posso ignorá-lo.

Cumps!
 
Ah, mas esse \n vem no texto, não é o ms sql que o lá meteu. isso não deve dár problemas. Vamos lá ver o seguinte, tu tens:

BLA BLA Total Registos: 77 Valor Total: 54497.11 BLA BLA
............x...................!.....y
...............................x+16


posição x = charindex ('total registos', mMsgContent)
posição y = charindex ('Valor Total', mMsgContent)

portanto o que queres é o que está entre a posição x+16 e y, logo:

substring (mMsgContent, x + 16, y - x - 16 )
o que dá:

substring (mMsgContent,
charindex ('total registos', mMsgContent) + 16 ,
charindex ('Valor Total', mMsgContent) - charindex ('total registos', mMsgContent) - 16)

o que aplicando ao que já temos dá:

Código:
SELECT 
sum(convert(float, 
substring (mMsgContent, 
           charindex ('Total Registos', mMsgContent) + 16, 
           charindex ('Valor Total', mMsgContent) - charindex ('Total Registos', mMsgContent) - 16)
)) 
from tblevent

tenta lá assim.
 
Última edição:
Ah, mas esse \n vem no texto, não é o ms sql que o lá meteu. isso não deve dár problemas. Vamos lá ver o seguinte, tu tens:

BLA BLA Total Registos: 77 Valor Total: 54497.11 BLA BLA
............x...................!.....y
...............................x+16


posição x = charindex ('total registos', mMsgContent)
posição y = charindex ('Valor Total', mMsgContent)

portanto o que queres é o que está entre a posição x+16 e y, logo:

substring (mMsgContent, x + 16, y - x - 16 )
o que dá:

substring (mMsgContent,
charindex ('total registos', mMsgContent) + 16 ,
charindex ('Valor Total', mMsgContent) - charindex ('total registos', mMsgContent) - 16)

o que aplicando ao que já temos dá:

Código:
SELECT 
sum(convert(float, 
substring (mMsgContent, 
           charindex ('Total Registos', mMsgContent) + 16, 
           charindex ('Valor Total', mMsgContent) - charindex ('Total Registos', mMsgContent) - 16)
)) 
from tblevent

tenta lá assim.


Boas,

Obrigado mais uma vez.

Volta a surgir a mesma mensagem de erro: Error converting data type nvarchar to float.

O \n que digo não está presente no texto, como no email a mensagem está assim:

Total Registos: 23
Valor Total: 17000

Penso que na base de dados, no campo onde este texto é colocado, tem de haver ali alguma coisa que indique que estas 2 strings estão em linhas diferentes. Qualquer coisa como um \n invisível.

Já estou a especular, não sei se isso existe.

Vou continuar a efectuar testes.

Se não conseguir, resta-me no pouco tempo que tenho, somar um a um para todos os meses do ano. :rolleyes:

Cumps
 
experimenta lá assim:

Código:
SELECT 
sum(convert(float, 
substring (mMsgContent, 
           charindex ('Total Registos', mMsgContent) + 16, 
           charindex ('Valor Total', mMsgContent) - charindex ('Total Registos', mMsgContent) - 17)
)) 
from tblevent
 
Acho que com esta já deve dár.

Código:
SELECT 
sum(convert(float, replace(
	substring (mMsgContent, 
           charindex ('Total Registos', mMsgContent) + 16, 
           charindex ('Valor Total', mMsgContent) - charindex ('Total Registos', mMsgContent) - 17)
,char(13),''))) 
from tblevent
 
Acho que com esta já deve dár.

Código:
SELECT 
sum(convert(float, replace(
    substring (mMsgContent, 
           charindex ('Total Registos', mMsgContent) + 16, 
           charindex ('Valor Total', mMsgContent) - charindex ('Total Registos', mMsgContent) - 17)
,char(13),''))) 
from tblevent

Boas,

Erro: Invalid length parameter passed to the substring function.


Mudou o erro, mas continua sem dar, Eu acho que tenho de ter alguma função adicional que primeiro detecte o valor até chegar a esse caractere. Assim que o encontrar, guarda o valor detectado numa variável e vai incrmentando.

Agora o problema é esse. Assim só com a query era mais simples mas tou a ver que não consigo.

Cumps!
 
Boas,

Esse erro não sei porquê, depois de alterar uma condição na cláusula where deixou de aparecer.

Assim, como troquei, já me soma todos os valores, mesmo que sejam maiores que 1 digito.

Tenho de testar agora é em relação ao intervalo de datas na condição.

De qualquer forma Muito Obrigado!!!
 
Back
Topo