sql >> Base de Datos >  >> RDS >> Sqlserver

CAST y IsNumeric

IsNumeric devuelve 1 si el valor varchar se puede convertir a CUALQUIER tipo de número. Esto incluye int, bigint, decimal, numérico, real y float.

La notación científica podría estar causándote un problema. Por ejemplo:

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

Hay un truco que puedes usar con IsNumeric para que devuelva 0 para números con notación científica. Puede aplicar un truco similar para evitar valores decimales.

EsNumérico(TuColumna + 'e0')

EsNumérico(TuColumna + '.0e0')

Pruébalo.

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