Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

CAST et IsNumeric

IsNumeric renvoie 1 si la valeur varchar peut être convertie en N'IMPORTE QUEL type de nombre. Cela inclut int, bigint, decimal, numeric, real &float.

La notation scientifique pourrait vous poser un problème. Par exemple :

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

Il existe une astuce que vous pouvez utiliser avec IsNumeric pour qu'il renvoie 0 pour les nombres avec une notation scientifique. Vous pouvez appliquer une astuce similaire pour empêcher les valeurs décimales.

EstNumérique(VotreColonne + 'e0')

EstNumérique(VotreColonne + '.0e0')

Essayez-le.

SELECT CAST(myVarcharColumn AS bigint)
FROM myTable
WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn