Zwykły ISNUMERIC to śmieci
- Pusty ciąg,
+
,-
i. wszystkie są ważne
- Tak samo jest
+.
itp. 1e-3
jest prawidłowy dla liczby zmiennoprzecinkowej, ale nie dziesiętnej (chyba że Rzucisz na zmiennoprzecinkową, a następnie na dziesiętną)
Aby uzyskać szczególnie tajemnicze, ale bezpieczne rozwiązanie, dołącz e0
lub .0e0
wtedy użyj ISNUMERYCZNE
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Więc
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable