プレーンISNUMERICはゴミです
- 空の文字列、
+
、-コード> および
。すべて有効です
+もそうです。
など-
1e-3
floatには有効ですが、10進数には有効ではありません(Floatしてから10進数にキャストする場合を除く)
特に不可解ですがフェイルセーフなソリューションについては、 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