sql >> Databáze >  >> RDS >> Sqlserver

CAST a IsNumeric

IsNumeric vrátí 1, pokud lze hodnotu varchar převést na JAKÝKOLI typ čísla. To zahrnuje int, bigint, desítkové, numerické, reálné a float.

Problém vám může způsobovat vědecký zápis. Například:

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

Existuje trik, který můžete použít s IsNumeric tak, že vrátí 0 pro čísla s vědeckým zápisem. Můžete použít podobný trik, abyste zabránili desítkovým hodnotám.

IsNumeric(YourColumn + 'e0')

IsNumeric(YourColumn + '.0e0')

Vyzkoušejte to.

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


  1. Jak vytvořit offline aplikaci pro internacionalizaci:Použijte databázi Sqlite

  2. Oracle 11g získá všechny odpovídající výskyty regulárním výrazem

  3. SQL Server CASE výraz

  4. MariaDB RTRIM() vs RTRIM_ORACLE():Jaký je rozdíl?