68 votes

Vérifier si un varchar est un nombre (TSQL)

existe-t-il un moyen simple de savoir si un varchar est un nombre?

Exemples:

abc123 --> pas de numéro

123 --> oui, c'est un nombre

Merci :)

150voto

Damien_The_Unbeliever Points 102139

ISNUMERIC ne le fera pas - il vous indique que la chaîne peut être convertie en n'importe quel type numérique, ce qui est presque toujours une information inutile à connaître. Par exemple, tous les éléments suivants sont numériques, selon ISNUMERIC :

£, $, 0d0

Si vous souhaitez vérifier les chiffres et uniquement les chiffres, une expression LIKE négative est ce que vous voulez :

 not Value like '%[^0-9]%'

36voto

Sachin Shanbhag Points 20979

ISNUMERIC fera

Consultez également la section NOTES dans l'article.

30voto

binil Points 3504

tu peux vérifier comme ça

 declare @vchar varchar(50)
set @vchar ='34343';
select case when @vchar not like '%[^0-9]%' then 'Number' else 'Not a Number' end

22voto

Dan Field Points 12945

En utilisant SQL Server 2012+, vous pouvez utiliser les fonctions TRY_* si vous avez des besoins spécifiques. Par exemple,

 -- will fail for decimal values, but allow negative values
TRY_CAST(@value AS INT) IS NOT NULL 

-- will fail for non-positive integers; can be used with other examples below as well, or reversed if only negative desired
TRY_CAST(@value AS INT) > 0

-- will fail if a $ is used, but allow decimals to the specified precision
TRY_CAST(@value AS DECIMAL(10,2)) IS NOT NULL 

-- will allow valid currency
TRY_CAST(@value AS MONEY) IS NOT NULL  

-- will allow scientific notation to be used like 1.7E+3
TRY_CAST(@value AS FLOAT) IS NOT NULL 

9voto

Wade73 Points 2102

J'ai rencontré le besoin d'autoriser les valeurs décimales, j'ai donc utilisé not Value like '%[^0-9.]%'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X