sql >> Databáze >  >> RDS >> Sqlserver

Jak určit hodnotu pole, kterou nelze převést na (desítkové, plovoucí, int) v SQL Server

Obyčejný ISNUMERIC je nesmysl

  • Prázdný řetězec, + , - a . jsou všechny platné
  • Stejně jako +. atd
  • 1e-3 je platné pro plovoucí, ale ne desetinné (pokud CAST na plovoucí a poté na desetinné číslo)

Pro obzvláště záhadné, ale bezpečné řešení, přidejte e0 nebo .0e0 pak použijte ISNUMERIC

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

Takže

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



  1. 7 tipů osvědčených postupů pro hromadné načítání dat PostgreSQL

  2. Neplatná výchozí hodnota pro 'dateAdded'

  3. Data z oracle v utf-8 s php

  4. Je opravdu nutné vytvářet SQLite tabulky při každém spuštění aplikace?