sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man bestämmer fältvärdet som inte kan konverteras till (decimal, float,int) i SQL Server

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 använd ISNUMERIC

SELECT
   ISNUMERIC(MyCOl + 'e0')   --decimal check,
   ISNUMERIC(MyCOl + '.0e0')  --integer check

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



  1. H2 postgresql-läge verkar inte fungera för mig

  2. spara List<Model class> till sqlite

  3. Förbättring av radnumreringsmedianlösningen

  4. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT och andra metoder för att hämta senaste identitet