sql >> Databasteknik >  >> RDS >> Sqlserver

CAST och IsNumeric

IsNumeric returnerar 1 om varchar-värdet kan konverteras till VILKEN taltyp. Detta inkluderar int, bigint, decimal, numerisk, real &float.

Vetenskaplig notation kan orsaka problem. Till exempel:

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

Det finns ett knep du kan använda med IsNumeric så att det returnerar 0 för tal med vetenskaplig notation. Du kan använda ett liknande knep för att förhindra decimalvärden.

IsNumeric(Din Kolumn + 'e0')

IsNumeric(Din Kolumn + '.0e0')

Prova det.

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


  1. Kontrollera om en icke-LOB-kolumn behöver uppdateras

  2. Hur importerar man CSV-fildata till en PostgreSQL-tabell?

  3. I Postgresql, tvinga unik på kombination av två kolumner

  4. PostgreSQL använd värde från föregående rad om det saknas