there is always something to develop
How to calculate total of digits in a varchar field
To calculate the total of digits in varchar field, you can do it in two different ways. First one is to calculate it using matrix processing (without loops). As a first step we create temporary table that contains at least as many records as the longest varchar field.
Subsequently , simply select exactly as many records from as the length of processed varchar getting in each record a character (digit) present at that particular position. Off course we exclude not numeric characters at this moment. Next we sum up the result.
declare @table table( [Index] integer default 0 ) INSERT INTO @table([Index]) select cast(1 as int) as [Index] union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 0 declare @cText as varchar(32) set @cText = '1235a54dgh5557890'; select sum( cast(substring(@cText,(t.[Index]*10+t2.[Index]),1) as int) ) from @table t inner join @table t2 on (1=1) where (t.[Index]*10+t2.[Index])<=Len(@cText) and IsNumeric(substring(@cText,t.[Index]*10+t2.[Index],1))=1 and (t.[Index]*10+t2.[Index])>0
In the result you get 59 as a total of all digits
The next solution requires using loop and it might be slower a little bit. However the length of the varchar will not be too long so I think it does not make too much difference.
declare @cText as varchar(32) set @cText = '1235a54dgh5557890'; declare @Index integer; declare @Total integer; set @Index=1; set @Total=0; while @Index<=len(@cText) begin if IsNumeric(substring(@cText,@Index,1))=1 set @Total=@Total+cast(substring(@cText,@Index,1) as integer) set @Index=@Index+1 end select @Total
See also
Comments
"Do you want to know who you are? Don't ask. Act! Action will delineate and define you"
You are 5869 reader
since 13th August 2009
Yes | 5.9% |
1 |
No | 94.1% |
16 |