ISNUMERIC ordinaire est nul
- Chaîne vide,
+
,-
et. sont tous valides
- Comme
+.
etc 1e-3
est 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