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

CHỌN CASE CAST Lỗi chuyển đổi

Bạn không thể kết hợp các kiểu dữ liệu trong các biểu thức CASE (hoặc ít nhất mà không cần quan tâm đến việc chúng sẽ truyền ngầm OK)

khi đối mặt với một khu vực như SQL Server sau sẽ sử dụng mức độ ưu tiên kiểu dữ liệu để xác định kiểu dữ liệu tổng thể của biểu thức phải là gì

SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END

Đối với datetime ở trên có mức độ ưu tiên cao hơn char vì vậy nó hoàn toàn chuyển chuỗi sang một ngày không thành công.

Tuy nhiên, sau đó thành công như sql_variant có mức độ ưu tiên cao hơn

SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END

Vì vậy, bạn có thể trả về nhiều kiểu dữ liệu hỗn hợp theo cách đó (tôi không chắc sql_variant dễ dàng như thế nào là để làm việc với mặc dù)

Ngoài ra, bạn có thể trả về NULL cho ngày giờ không hợp lệ thay vì trả về dữ liệu vô nghĩa hoặc chuyển mọi thứ thành chuỗi nếu bạn phải trả lại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ thuật nhanh và tốt nhất để khôi phục tệp SQL Server MDF

  2. Truy vấn máy chủ được liên kết động

  3. SQL:loại bỏ dấu phẩy cuối cùng trong chuỗi

  4. Xóa bản ghi khỏi tập dữ liệu và máy chủ sql

  5. Không thể kết nối với máy chủ báo cáo 2008 r2