Quersumme / isnumeric

06/11/2009 - 11:21 von Michael Monarch | Report spam
Hallo Experten,

die folgende Procedure (bei mir als Function) ermittelt die Quersumme aus
einem beliebigen 'String'. Dabei habe ich festgestellt, dass mit isnumeric
('.') true bzw. 1 zurückgeben wird ! Wieso ist ein Punkt eine Zahl? Aus
diesem Grund habe ich die folgende Zeile eingebaut:

set @Formel = replace(replace(@Formel,'.',''),',','')

Schaut euch das mal an, vielleicht habt ihr ja eine bessere Lösung

Declare @Formel as nchar(100)

set @Formel = 'XX12A3.15'
set @Formel = replace(replace(@Formel,'.',''),',','')


Declare @LZàhler as int ; set @LZàhler=0
Declare @PZàhler as int ; set @PZàhler=0
Declare @SZàhler as int ; set @SZàhler=0

set @LZàhler = (Select len(@Formel))

while @PZàhler<@LZàhler
Begin
set @PZàhler=@PZàhler+1
if isnumeric(substring(@Formel,@PZàhler,1))=1
begin
set @SZàhler=@SZàhler+ substring(@Formel,@PZàhler,1)
end
end

print @SZàhler
 

Lesen sie die antworten

#1 Hannes Brunner
06/11/2009 - 11:34 | Warnen spam
Hallo Michael,

Michael Monarch schrieb:
Hallo Experten,

die folgende Procedure (bei mir als Function) ermittelt die Quersumme aus
einem beliebigen 'String'. Dabei habe ich festgestellt, dass mit isnumeric
('.') true bzw. 1 zurückgeben wird ! Wieso ist ein Punkt eine Zahl? Aus
diesem Grund habe ich die folgende Zeile eingebaut:



isnumeric() ist nicht für Einzelzeichen, sondern für Zeichenketten
gedacht. Aber ich stimme zu, für ein einzelnes '.' true zu liefern, ist
schon merkwürdig.

Für deinen Einsatzfall ist LIKE besser geeignet:

'.' LIKE '[0-9]' -> false
'3' LIKE '[0-9]' -> true

HTH
Hannes

Ähnliche fragen