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

không thể truyền giá trị dưới dạng float

Về suy nghĩ sau của bạn.

SQL Server 2012 giới thiệu TRY_CONVERT cho nhu cầu này. Vì vậy, truy vấn sau sẽ trả về NULL chứ không phải là một lỗi.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Không có gì đảm bảo ngay cả với các gói nối tiếp rằng WHERE mệnh đề sẽ xảy ra trước SELECT được đánh giá. Như đã giải thích trong bài đăng blog này từ SQL Server 2005 trở đi, điều này có nhiều khả năng xảy ra hơn các phiên bản trước. Thay đổi hành vi đối với các tính năng của Database Engine trong SQL Máy chủ 2005 cụ thể gọi điều này như sau.

Thảo luận thêm về hành vi này có trong một bài đăng blog hay khác của Craig Freedman Lỗi chuyển đổi và số học .

Trên các phiên bản trước năm 2012 và TRY_CONVERT bạn cần bọc CAST AS FLOAT trong một CASE bản tường trình. ví dụ:

  SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
  FROM Table
  WHERE ISNUMERIC(Col)=1

Điều này vẫn không được đảm bảo tuyệt đối để tránh bạn gặp lỗi dưới dạng ISNUMERIC bản thân nó chỉ kiểm tra xem giá trị sẽ truyền đến một trong các kiểu dữ liệu số chứ không phải cụ thể là float Ví dụ về đầu vào không thành công là '.'

CASE được ghi lại hầu hết là ngắn mạch trong sách trực tuyến ( một số ngoại lệ được thảo luận ở đây )

Bạn cũng có thể tìm thêm thảo luận / khiếu nại về điều này trong mục kết nối Máy chủ SQL không được tạo ra các lỗi phi logic giải thích tốt về một vấn đề tương tự bởi SQLKiwi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo Ràng buộc Duy nhất trên Cột cho Bảng đã tồn tại - Hướng dẫn SQL Server / TSQL Phần 97

  2. So sánh 2 bảng trong sql

  3. SQL - downcast BIGINT về INT một cách an toàn

  4. Cách tìm số nhận dạng duy nhất tối ưu trong bảng trong SQL Server:sp_special_columns

  5. Cách sử dụng SqlTransaction trong C #