ISNUMERIC ordinaire est nul
- Chaîne vide,
+,-et. sont tous valides - Comme
+.etc 1e-3est valide pour float mais pas décimal (sauf si vous CAST pour float puis décimal)
Pour une solution particulièrement cryptique mais à sécurité intégrée, ajoutez e0 ou .0e0 alors utiliser ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Alors
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable