Array
(
)

somar digitos de um campo

Tgcsta
   - 28 ago 2009

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

Emerson
   - 31 ago 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.
#Código

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.

#Código
SELECT
  model, dbo.SOMA_CARAC(model) NumModelo
FROM
  product


Tgcsta
   - 01 set 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

Tgcsta
   - 01 set 2009

peço desculpa mas enviei o link errado. o certo é este:

http://www.sql-ex.ru/exercises.php?N=4

Pergunta 4.

peace