Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

CAST và IsNumeric

IsNumeric trả về 1 nếu giá trị varchar có thể được chuyển đổi thành BẤT KỲ loại số nào. Điều này bao gồm int, bigint, decimal, số, real &float.

Ký hiệu khoa học có thể gây ra cho bạn một vấn đề. Ví dụ:

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ó một thủ thuật bạn có thể sử dụng với IsNumeric để nó trả về 0 cho các số có ký hiệu khoa học. Bạn có thể áp dụng một thủ thuật tương tự để ngăn chặn các giá trị thập phân.

IsNumeric (YourColumn + 'e0')

IsNumeric (YourColumn + '.0e0')

Hãy dùng thử.

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. Cập nhật Dữ liệu Salesforce bằng Con trỏ Máy chủ SQL

  2. Nối các giá trị dựa trên ID

  3. Các loại con trỏ máy chủ SQL - Sự khác biệt giữa con trỏ địa phương và toàn cầu là gì | Hướng dẫn sử dụng SQL Server / TSQL

  4. Tạo một máy chủ được liên kết trong SQL Server (Ví dụ T-SQL)

  5. Các bản sửa lỗi liên quan đến hiệu suất cho SQL Server 2012