somar digitos de um campo
boas
Gostava de saber como consigo fazer uma query que me faça a soma dos digitos de um campo varchar.
exemplo: tenho um campo modelo com o seguinte valor 1234
e o resultado que pretendo é 1+2+3+4
Resultado: Soma=10
Consegui fazer da seguinte maneira:
SELECT model, CONVERT (NUMERIC(6,0), SUBSTRING(model,1,1)*1.0+SUBSTRING(model,2,1)*1.0+SUBSTRING(model,3,1)*1.0+SUBSTRING(model,4,1)*1.0)
FROM product
O problema é que podem haver campos com mais de 4 digitos ou com letras..não sei como resolver esse problema..se me poderem ajudar agradeçia
peace
Gostava de saber como consigo fazer uma query que me faça a soma dos digitos de um campo varchar.
exemplo: tenho um campo modelo com o seguinte valor 1234
e o resultado que pretendo é 1+2+3+4
Resultado: Soma=10
Consegui fazer da seguinte maneira:
SELECT model, CONVERT (NUMERIC(6,0), SUBSTRING(model,1,1)*1.0+SUBSTRING(model,2,1)*1.0+SUBSTRING(model,3,1)*1.0+SUBSTRING(model,4,1)*1.0)
FROM product
O problema é que podem haver campos com mais de 4 digitos ou com letras..não sei como resolver esse problema..se me poderem ajudar agradeçia
peace
Tgcsta
Curtidas 0
Respostas
Emerson Nascimento
28/08/2009
creio que isso só seja possível através de user functions.
fiz a função abaixo que recebe um texto de até 50 caracteres e retorna a soma dos caracteres numéricos.
depois é só usar como qualquer função interna do SQL Server.
fiz a função abaixo que recebe um texto de até 50 caracteres e retorna a soma dos caracteres numéricos.
CREATE FUNCTION [dbo].[SOMA_CARAC] (@VALORSTR VARCHAR(50)) RETURNS INTEGER AS BEGIN DECLARE @I INTEGER DECLARE @LETRA CHAR(1) DECLARE @IRET INTEGER DECLARE @RETORNO VARCHAR(10) SET @IRET = 0 SET @I = 1 WHILE @I <= LEN(@VALORSTR) BEGIN SET @LETRA = SUBSTRING(@VALORSTR,@I,1) IF @LETRA BETWEEN ´0´ AND ´9´ SET @IRET = @IRET + CAST(@LETRA AS INTEGER) SET @I = @I + 1 END RETURN @IRET END
depois é só usar como qualquer função interna do SQL Server.
SELECT model, dbo.SOMA_CARAC(model) NumModelo FROM product
GOSTEI 0
Tgcsta
28/08/2009
obrigado pela ajuda, mas o problema é que tenho de começar com o SELECT..
é mais facil eu colocar aqui o link da pergunta, para ver se me conseguem ajudar
http://www.sql-ex.ru/exercises.php?N=2
mais uma vez obrigado.
peace
é mais facil eu colocar aqui o link da pergunta, para ver se me conseguem ajudar
http://www.sql-ex.ru/exercises.php?N=2
mais uma vez obrigado.
peace
GOSTEI 0
Tgcsta
28/08/2009
peço desculpa mas enviei o link errado. o certo é este:
http://www.sql-ex.ru/exercises.php?N=4
Pergunta 4.
peace
http://www.sql-ex.ru/exercises.php?N=4
Pergunta 4.
peace
GOSTEI 0