Almindelig ISNUMERIC er noget vrøvl
- Tom streng,
+
,-
og. er alle gyldige
- Det samme er
+.
osv. 1e-3
er 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