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.