Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách xác định giá trị trường không thể chuyển đổi thành (thập phân, float, int) trong SQL Server

ISNUMERIC đơn thuần là rác rưởi

  • Chuỗi trống, + , - . đều hợp lệ
  • +. cũng vậy vv
  • 1e-3 hợp lệ đối với float nhưng không hợp lệ với số thập phân (trừ khi bạn CAST để float sau đó chuyển sang số thập phân)

Đối với một giải pháp đặc biệt khó hiểu nhưng an toàn, hãy nối thêm e0 hoặc .0e0 sau đó sử dụng ISNUMERIC

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

Vì vậy,

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. Làm cách nào để đổi tên thứ gì đó trong SQL Server có dấu ngoặc vuông trong tên?

  2. Tạo mặt nạ dữ liệu động trong SQL Server cho người dùng nâng cao

  3. SQL Server:Nhận khóa chính của bảng bằng truy vấn sql

  4. Cách hàm FORMAT () hoạt động trong SQL Server (T-SQL)

  5. Cú pháp nối nào tốt hơn?