Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak określić wartość pola, której nie można przekonwertować na (dziesiętne, zmiennoprzecinkowe, int) w SQL Server?

Zwykły ISNUMERIC to śmieci

  • Pusty ciąg, + , - i . wszystkie są ważne
  • Tak samo jest +. itp.
  • 1e-3 jest prawidłowy dla liczby zmiennoprzecinkowej, ale nie dziesiętnej (chyba że Rzucisz na zmiennoprzecinkową, a następnie na dziesiętną)

Aby uzyskać szczególnie tajemnicze, ale bezpieczne rozwiązanie, dołącz e0 lub .0e0 wtedy użyj ISNUMERYCZNE

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

Więc

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opóźniona trwałość w SQL Server 2014

  2. Użyj DB_ID(), aby zwrócić identyfikator bazy danych w SQL Server

  3. Jaka jest różnica między Scope_Identity(), Identity(), @@Identity i Ident_Current()?

  4. Jak przekazać sqlparameter do IN()?

  5. Jak utworzyć tabelę za pomocą GUI w SQL Server — SQL Server / T-SQL Tutorial, część 37