Almindelig ISNUMERIC er noget vrøvl
- Tom streng,
+,-og. er alle gyldige - Det samme er
+.osv. 1e-3er gyldig for float, men ikke decimal (medmindre du CAST for at flyde derefter til decimal)
For en særlig kryptisk, men fejlsikker løsning skal du tilføje e0 eller .0e0 så brug ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Så
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable