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

Tại sao DECODE của Oracle lại cho tôi một giá trị khác với NVL?

Đó là vì tham số 3 của câu lệnh giải mã của bạn là NULL; theo tài liệu (nhấn mạnh của tôi).

Oracle tự động chuyển đổi expr và từng giá trị tìm kiếm thành kiểu dữ liệu của giá trị tìm kiếm đầu tiên trước khi so sánh .... Nếu kết quả đầu tiên có kiểu dữ liệu CHAR hoặc nếu kết quả đầu tiên là null, thì Oracle chuyển đổi giá trị trả về thành kiểu dữ liệu VARCHAR2 .

Trong trường hợp của bạn, kết quả đầu tiên là NULL, được Oracle coi là VARCHAR2. Giá trị trả về của bạn đang được chuyển đổi hoàn toàn thành VARCHAR2. Nếu bạn đã thay đổi DECODE() của mình vào phần sau, bạn sẽ nhận được một số:

select decode(1, 0, 0, 0.75)

và bạn có thể đạt được NULL của mình bằng cách sử dụng NULLIF() chức năng:

select nullif(decode(1, 0, 0, 0.75), 0) ...

Tốt hơn nên sử dụng câu lệnh CASE, câu lệnh này bắt buộc tất cả các kiểu dữ liệu trả về đều giống nhau:

select case 1 when 0 then null
              else 0.75
       end ...

1. mà tôi cũng đã biết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng setDate trong PreparedStatement

  2. Có cách nào để xóa đầu ra từ PL / SQL trong Oracle không?

  3. Quy trình xuất bảng thành nhiều tệp csv

  4. Làm thế nào để Chọn một chuỗi con trong Oracle SQL cho đến một ký tự cụ thể?

  5. Oracle (Cũ?) Gia nhập - Một công cụ / tập lệnh để chuyển đổi?