ISNUMERIC biasa adalah sampah
- String kosong,
+
,-
dan. semuanya valid
- Begitu juga
+.
dll 1e-3
valid 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