Einfach ISNUMERIC ist Müll
- Leerer String,
+
,-
und. sind alle gültig
- So ist
+.
usw 1e-3
gilt für Gleitkommazahlen, aber nicht für Dezimalzahlen (es sei denn, Sie wandeln in Gleitkommazahlen und dann in Dezimalzahlen um)
Für eine besonders kryptische, aber ausfallsichere Lösung fügen Sie e0
hinzu oder .0e0
dann Verwenden Sie ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Also
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable