ISNUMERIC biasa adalah sampah
- String kosong,
+,-dan. semuanya valid - Begitu juga
+.dll 1e-3valid untuk float tapi bukan desimal (kecuali jika Anda CAST ke float lalu ke desimal)
Untuk solusi yang sangat samar namun gagal aman, tambahkan e0 atau .0e0 lalu gunakan ISNUMERIK
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Jadi
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable