web-dev-qa-db-fra.com

SQL Server: Comment tester si une chaîne ne contient que des caractères numériques

Je travaille dans SQL Server 2008. J'essaie de tester si une chaîne (varchar) comporte uniquement des caractères numériques (0 à 9). Je sais que la fonction IS_NUMERIC peut donner des résultats erronés. (Mes données peuvent éventuellement avoir des signes $, ce qui ne devrait pas passer le test.) Donc, j'évite cette fonction.

J'ai déjà un test pour voir si une chaîne a des caractères autres que des chiffres, c'est-à-dire

some_column LIKE '%[^0123456789]%'

Je penserais que le test à un seul chiffre serait similaire, mais je fais un blanc. Des idées?

28
user3100444

Utilisez Not Like 

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

Démo

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

select 1 where @str NOT LIKE '%[^0-9]%'
46
Pரதீப்

Il existe une fonction système appelée ISNUMERIC pour SQL 2008 et versions ultérieures. Un exemple:

SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;

J'ai fait quelques tests rapides et j'ai aussi approfondi mes recherches:

ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.

Ce qui signifie qu'il est assez prévisible par exemple

-9879210433 passera mais 987921-0433 ne passera pas .$9879210433 passera mais 9879210$433 ne passera pas.

Ainsi, en utilisant ces informations, vous pouvez éliminer la liste des symboles de devise valides et des caractères + & -.

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 @x=@x+1
END
ELSE
BEGIN
SET @exit=0
PRINT 'string is not all numeric  -:('
END
END
0
Dudi Konfino

Solution: où some_column NOT LIKE '% [^ 0-9]%' .__ est correct. 

Juste une remarque importante: Ajoutez une validation pour quand la chaîne column = ''. Ce scénario renverra que "" est également un nombre valide.

0
Victor Barajas