IsNumeric връща 1, ако стойността на varchar може да бъде преобразувана във ВСЕКИ тип число. Това включва int, bigint, decimal, numeric, real &float.
Научната нотация може да ви създаде проблем. Например:
Declare @Temp Table(Data VarChar(20))
Insert Into @Temp Values(NULL)
Insert Into @Temp Values('1')
Insert Into @Temp Values('1e4')
Insert Into @Temp Values('Not a number')
Select Cast(Data as bigint)
From @Temp
Where IsNumeric(Data) = 1 And Data Is Not NULL
Има трик, който можете да използвате с IsNumeric, така че да връща 0 за числа с научна нотация. Можете да приложите подобен трик, за да предотвратите десетични стойности.
IsNumeric(Вашата колона + 'e0')
IsNumeric(Вашата колона + '.0e0')
Изпробвайте го.
SELECT CAST(myVarcharColumn AS bigint)
FROM myTable
WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn