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