none
sumar digitos de un registro especifico con SQL 2008 RRS feed

  • Pregunta

  • el problema consiste en poder sumar los digitos de un mismo registro,

    estoy utilizando SQL 2008 y tengo un campo que tiene como tipo de dato - nvarchar(16) ademas tengo ese campo un registros con los digitos 123456789

    hay posibilidad de sumar esos digitos ejemplo 1+2+3+4+5+6+7+8+9=45

     he usado un SUBSTRING de esta forma:

    SELECT

     

    campo,

    SUBSTRING

     

    (campo,1,9)

    FROM

     

     mitabla WHERE campo=123456789

    pero no he econtrado la forma de sumar eso digitos

    si serian tan amables de ayudarme con eso seria de mucha ayuda...

    gracias de antemano

    viernes, 18 de junio de 2010 4:07

Respuestas

  • Podrías crear una función asi:

    create function dbo.SumarDigitos(@texto nvarchar(16)) returns int
    as
    begin
      declare @suma int
      set @suma=0
      declare @i int
      set @i=1
      while @i<=len(@texto)
      begin
       declare @c char(1)
       set @c=substring(@texto, @i, 1)
       set @suma=@suma+convert(int, @c)
       set @i=@i+1
      end
      return @suma
    end
    go

    Luego, no tienes más que llamar a esa función al hacer el Select:

    SELECT campo, dbo.SumarDigitos(campo) FROM mitabla
    martes, 29 de junio de 2010 17:41

Todas las respuestas

  • Podrías crear una función asi:

    create function dbo.SumarDigitos(@texto nvarchar(16)) returns int
    as
    begin
      declare @suma int
      set @suma=0
      declare @i int
      set @i=1
      while @i<=len(@texto)
      begin
       declare @c char(1)
       set @c=substring(@texto, @i, 1)
       set @suma=@suma+convert(int, @c)
       set @i=@i+1
      end
      return @suma
    end
    go

    Luego, no tienes más que llamar a esa función al hacer el Select:

    SELECT campo, dbo.SumarDigitos(campo) FROM mitabla
    martes, 29 de junio de 2010 17:41
  •  

    Muchas Gracias por su apoyo... me ha sido de mucha ayuda y estoy logrando el objetivo...

    domingo, 4 de julio de 2010 22:51