Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

CAST e IsNumeric


IsNumeric retornará 1 se o valor varchar puder ser convertido em QUALQUER tipo de número. Isso inclui int, bigint, decimal, numérico, real e float.

A notação científica pode estar causando um problema. Por exemplo:
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

Existe um truque que você pode usar com IsNumeric para que ele retorne 0 para números com notação científica. Você pode aplicar um truque semelhante para evitar valores decimais.

IsNumeric(YourColumn + 'e0')

IsNumeric(SuaColuna + '.0e0')

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