Ответ 1
Обычный ISNUMERIC - это мусор
- Пустая строка,
+
,-
и. все действительны
- Итак,
+.
и т.д. -
1e-3
действителен для float, но не десятичного (если вы CAST не плаваете, то до десятичного)
Для особо загадочного, но безотказного решения добавьте e0
или .0e0
, затем используйте ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Итак,
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable