Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да определите стойността на полето, която не може да се преобразува в (десетична, float,int) в SQL Server

Обикновеният ISNUMERIC е боклук

  • Празен низ, + , - и . всички са валидни
  • И +. и др.
  • 1e-3 е валидно за float, но не и за десетичен знак (освен ако не CAST, за да float след това до десетичен знак)

За особено загадъчно, но сигурно решение, добавете e0 или .0e0 тогава използвайте 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да форматирам число със запетаи в T-SQL?

  2. Обединете два дяла в един в SQL Server (T-SQL)

  3. 5 предимства за сигурността на решенията за наблюдение на базирани в облак бази данни

  4. Използвайте @@IDENTITY, за да върнете последно въведената стойност на самоличността в SQL Server

  5. Промяна на съществуваща колона в изчислена колона в SQL Server (пример за T-SQL)