Ich arbeite in SQL Server 2008. Ich versuche zu testen, ob eine Zeichenfolge (Varchar) nur Ziffernzeichen (0-9) enthält. Ich weiß, dass die IS_NUMERIC-Funktion zu falschen Ergebnissen führen kann. (Meine Daten können möglicherweise $ -Zeichen enthalten, die den Test nicht bestehen sollten.) Ich verzichte also auf diese Funktion.
Ich habe bereits einen Test, um zu sehen, ob eine Zeichenfolge nicht-stellige Zeichen enthält, d. H.
some_column LIKE '%[^0123456789]%'
Ich würde denken, dass der Test mit nur einer Ziffer etwas Ähnliches wäre, aber ich zeichne ein Leerzeichen. Irgendwelche Ideen?
Verwenden Sie Not Like
where some_column NOT LIKE '%[^0-9]%'
declare @str varchar(50)='50'--'asdarew345'
select 1 where @str NOT LIKE '%[^0-9]%'
Für SQL 2008 und höher gibt es eine Systemfunktion namens ISNUMERIC . Ein Beispiel:
SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;
Ich habe ein paar Schnelltests gemacht und auch in die Dokumentation hineingeschaut:
ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.
Was bedeutet, dass es zum Beispiel ziemlich vorhersehbar ist
-9879210433
würde passieren, aber 987921-0433
nicht .$9879210433
würde passieren, 9879210$433
nicht.
Wenn Sie diese Informationen verwenden, können Sie anhand der Liste der gültigen Währungssymbole und +
& -
-Zeichen auswählen.
DECLARE @x int=1
declare @exit bit=1
WHILE @x<=len('123c') AND @exit=1
BEGIN
IF ascii(SUBSTRING('123c',@x,1)) BETWEEN 48 AND 57
BEGIN
set @[email protected]+1
END
ELSE
BEGIN
SET @exit=0
PRINT 'string is not all numeric -:('
END
END
Lösung: Wobei some_column NOT LIKE '% [^ 0-9]%' Ist richtig.
Nur ein wichtiger Hinweis: Fügen Sie eine Validierung hinzu, wenn die Zeichenfolgenspalte = '' ist. Dieses Szenario gibt zurück, dass '' ebenfalls eine gültige Zahl ist.