Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

CAST и IsNumeric

IsNumeric връща 1, ако стойността на varchar може да бъде преобразувана във ВСЕКИ тип число. Това включва int, bigint, decimal, numeric, real &float.

Научната нотация може да ви създаде проблем. Например:

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

Има трик, който можете да използвате с IsNumeric, така че да връща 0 за числа с научна нотация. Можете да приложите подобен трик, за да предотвратите десетични стойности.

IsNumeric(Вашата колона + 'e0')

IsNumeric(Вашата колона + '.0e0')

Изпробвайте го.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Може ли таблица на sql сървър да има две колони за идентичност?

  2. Вземете деня на годината от дата в SQL Server (T-SQL)

  3. Решения за това как да четете регистрационния файл на SQL Server без грешка

  4. Заобиколно решение за DATEDIFF() игнориране на SET DATEFIRST в SQL Server (пример за T-SQL)

  5. Поправете повредена SQL база данни по време на проблем с надстройката