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?
Utilisez Not Like
where some_column NOT LIKE '%[^0-9]%'
declare @str varchar(50)='50'--'asdarew345'
select 1 where @str NOT LIKE '%[^0-9]%'
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 +
& -
.
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
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.