ISNUMERIC đơn thuần là rác rưởi
- Chuỗi trống,
+
,-
và. đều hợp lệ
-
+.
cũng vậy vv -
1e-3
hợp lệ đối với float nhưng không hợp lệ với số thập phân (trừ khi bạn CAST để float sau đó chuyển sang số thập phân)
Đối với một giải pháp đặc biệt khó hiểu nhưng an toàn, hãy nối thêm e0
hoặc .0e0
sau đó sử dụng ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Vì vậy,
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable