Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So bestimmen Sie den Feldwert, der in SQL Server nicht in (dezimal, Float, Int) konvertiert werden kann

Einfach ISNUMERIC ist Müll

  • Leerer String, + , - und . sind alle gültig
  • So ist +. usw
  • 1e-3 gilt für Gleitkommazahlen, aber nicht für Dezimalzahlen (es sei denn, Sie wandeln in Gleitkommazahlen und dann in Dezimalzahlen um)

Für eine besonders kryptische, aber ausfallsichere Lösung fügen Sie e0 hinzu oder .0e0 dann Verwenden Sie ISNUMERIC

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

Also

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