Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como determinar o valor do campo que não pode ser convertido em (decimal, float,int) no SQL Server


Simples ISNUMERIC é lixo
  • String vazia, + , - e . são todos válidos
  • Assim como +. etc
  • 1e-3 é válido para float, mas não decimal (a menos que você CAST para float e depois para decimal)

Para uma solução particularmente enigmática, mas à prova de falhas, anexe e0 ou .0e0 então use ISNUMERIC
SELECT
   ISNUMERIC(MyCOl + 'e0')   --decimal check,
   ISNUMERIC(MyCOl + '.0e0')  --integer check

então
SELECT
    ID, VALUE,
    CAST(
          CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
          AS decimal(38, 10)
        ) AS ConvertedVALUE
FROM
    Mytable