Obyčejný ISNUMERIC je nesmysl
- Prázdný řetězec,
+
,-
a. jsou všechny platné
- Stejně jako
+.
atd 1e-3
je platné pro plovoucí, ale ne desetinné (pokud CAST na plovoucí a poté na desetinné číslo)
Pro obzvláště záhadné, ale bezpečné řešení, přidejte e0
nebo .0e0
pak použijte ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Takže
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable