Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment déterminer la valeur du champ qui ne peut pas être convertie en (décimal, flottant, int) dans SQL Server

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