Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

CAST e IsNumeric

IsNumeric restituisce 1 se il valore varchar può essere convertito in QUALSIASI tipo di numero. Ciò include int, bigint, decimale, numerico, reale e float.

La notazione scientifica potrebbe causare problemi. Ad esempio:

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

C'è un trucco che puoi usare con IsNumeric in modo che restituisca 0 per i numeri con notazione scientifica. Puoi applicare un trucco simile per evitare valori decimali.

IsNumeric(YourColumn + 'e0')

IsNumeric(YourColumn + '.0e0')

Provalo.

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