Vanligt ISNUMERIC är skräp
- Tom sträng,
+
,-
och. är alla giltiga
- Så är
+.
etc 1e-3
är giltig för flytande men inte decimal (såvida du inte CAST för att flyta sedan till decimal)
För en särskilt kryptisk men felsäker lösning, lägg till e0
eller .0e0
då använd 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