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

Chuyển đổi không thành công khi chuyển đổi giá trị varchar trong câu lệnh trường hợp

Khi sử dụng CASE câu lệnh, tất cả các biểu thức kết quả phải có cùng kiểu dữ liệu. Nếu không, kết quả sẽ được chuyển đổi thành kiểu dữ liệu có mức độ ưu tiên cao hơn. Theo BOL :

Kể từ INT ưu tiên loại dữ liệu cao hơn hơn VARCHAR , "Weeks" được chuyển đổi thành INT và điều đó tạo ra lỗi:

Một ví dụ khác sẽ tạo ra lỗi tương tự:

SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END

Giải pháp là chuyển đổi RS.intInterval thành VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Truy vấn cuối cùng của bạn phải là:

DECLARE @bFlag bit
SET @bFlag = 0
SELECT  something = CASE
                WHEN @bFlag = 1 THEN
                    CASE
                        WHEN RS.intInterval = 1 THEN '"Days"'
                        WHEN RS.intInterval = 2 THEN '"Weeks"'
                        WHEN RS.intInterval = 3 THEN '"Months"'
                        WHEN RS.intInterval = 4 THEN '"Years"'
                    END
                Else 
                    CONVERT(VARCHAR(10), RS.intInterval)
                End
from    MyTable  AS RS WITH (NOLOCK)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn để kiểm tra xem một cột có thể nullable hay không

  2. Cập nhật nhiều hàng bằng câu lệnh select

  3. Làm cách nào để xóa các ký tự đầu tiên của một cột cụ thể trong bảng?

  4. Tôi có phải đếm các giao dịch trước khi khôi phục một trong khối bắt trong T-SQL không?

  5. 3 cách để lấy giản đồ của một tập hợp kết quả trong SQL Server