webentwicklung-frage-antwort-db.com.de

SQL Server: So testen Sie, ob eine Zeichenfolge nur aus Ziffern besteht

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?

28
user3100444

Verwenden Sie Not Like 

where some_column NOT LIKE '%[^0-9]%'

Demo

declare @str varchar(50)='50'--'asdarew345'

select 1 where @str NOT LIKE '%[^0-9]%'
46

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.

7
Bensonius
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
0
Dudi Konfino

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.

0
Victor Barajas