sql >> Database >  >> RDS >> Sqlserver

Hoe de veldwaarde te bepalen die niet kan worden geconverteerd naar (decimaal, zwevend, int) in SQL Server

Gewoon ISNUMERIC is onzin

  • Lege tekenreeks, + , - en . zijn allemaal geldig
  • Zo is +. enz.
  • 1e-3 is geldig voor zwevend maar niet decimaal (tenzij u CAST om te zweven dan naar decimaal)

Voor een bijzonder cryptische maar faalveilige oplossing, voeg e0 . toe of .0e0 dan gebruik ISNUMERIC

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

Dus

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



  1. Oracle SQL*Plus gebruiken

  2. Onze meest populaire databaseblogposts in 2017

  3. Oracle partitie index

  4. Databasemodellering