Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

CAST i IsNumeric

IsNumeric zwraca 1, jeśli wartość varchar można przekonwertować na DOWOLNY typ liczbowy. Obejmuje to int, bigint, dziesiętny, numeryczny, rzeczywisty i zmiennoprzecinkowy.

Notacja naukowa może być przyczyną problemu. Na przykład:

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

Istnieje sztuczka, której możesz użyć z IsNumeric, aby zwracała 0 dla liczb z notacją naukową. Możesz zastosować podobną sztuczkę, aby zapobiec wartościom dziesiętnym.

IsNumeric(TwojaKolumna + 'e0')

IsNumeric(TwojaKolumna + '.0e0')

Wypróbuj.

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. 2 sposoby na zwrócenie listy połączonych serwerów w SQL Server przy użyciu T-SQL

  2. Jak zaktualizować dwie tabele w jednej instrukcji w SQL Server 2005?

  3. Zrozumienie rozmiaru pamięci „datetimeoffset” w SQL Server

  4. warunek UNION ALL vs OR w zapytaniu serwera sql

  5. Usuń wypełnienie podczas wysyłania wyników zapytania w wiadomości e-mail z serwera SQL (T-SQL)