Trong Oracle, hàm DECODE cho phép chúng ta thêm logic thủ tục if-then-else vào truy vấn. Trong blog này, chúng tôi sẽ cố gắng tìm hiểu đầy đủ về hàm DECODE trong SQL. Chúng ta sẽ học các cách khác nhau để sử dụng DECODE, cú pháp của nó và hiểu nó với các ví dụ. Ở lại với chúng tôi cho đến khi kết thúc blog.
Các chủ đề sẽ được đề cập là:
- Hàm DECODE trong SQL là gì?
- Cú pháp của hàm DECODE
- Ví dụ về hàm DECODE
Hãy bắt đầu từng cái một.
Hàm DECODE trong SQL là gì?
Trong Oracle, hàm DECODE cho phép chúng ta thêm logic thủ tục if-then-else vào truy vấn. DECODE so sánh biểu thức với từng giá trị tìm kiếm một. Nếu biểu thức bằng với một tìm kiếm, thì kết quả tương ứng được trả về bởi Cơ sở dữ liệu Oracle. Nếu không tìm thấy kết quả phù hợp, thì giá trị mặc định sẽ được trả về. Nếu mặc định bị bỏ qua, thì Oracle trả về null.
Loại đối số có thể là:
- Loại số (NUMBER, BINARY_FLOAT hoặc BINARY_DOUBLE)
Nếu cặp kết quả tìm kiếm đầu tiên là số, thì Oracle sẽ so sánh tất cả các biểu thức kết quả tìm kiếm và số exp đầu tiên để tìm đối số có mức ưu tiên số cao nhất, chuyển đổi hoàn toàn các đối số còn lại thành kiểu dữ liệu đó và trả về kiểu dữ liệu cụ thể đó.
- Loại ký tự
Nếu expr và search là dữ liệu ký tự, thì Oracle sẽ so sánh chúng bằng cách sử dụng ngữ nghĩa so sánh không đệm. expr, tìm kiếm và kết quả có thể là bất kỳ kiểu dữ liệu nào trong số các kiểu dữ liệu CHAR, VARCHAR2, NCHAR hoặc NVARCHAR2. Chuỗi trả về có kiểu dữ liệu VARCHAR2 và có cùng bộ ký tự với tham số kết quả đầu tiên.
Cơ sở dữ liệu Oracle sử dụng đánh giá ngắn mạch. Nó chỉ đánh giá các giá trị tìm kiếm trước khi so sánh nó với biểu thức chứ không phải đánh giá tất cả các giá trị tìm kiếm. Nếu một tìm kiếm trước đó bằng với biểu thức, thì việc đánh giá sẽ bị chấm dứt.
Oracle chuyển đổi các giá trị expr và 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. Và chuyển đổi giá trị trả về thành cùng kiểu dữ liệu với kết quả đầu tiên.
Ví dụ: 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à rỗng, thì Oracle sẽ chuyển đổi giá trị trả về thành kiểu dữ liệu VARCHAR2.
Hai giá trị null được coi là tương đương với Oracle. Nếu expr là null, thì Oracle trả về NULL, là kết quả của lần tìm kiếm đầu tiên.
Số thành phần tối đa có thể chứa trong hàm DECODE là 255. Điều này bao gồm các đối số biểu thức, tìm kiếm và kết quả.
Hàm DECODE có thể được sử dụng trong các phiên bản sau của Oracle hoặc PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Một ví dụ cơ bản:
Trong ví dụ sau, hàm Oracle DECODE () so sánh đối số đầu tiên với đối số thứ hai. Vì chúng bằng nhau nên hàm trả về đối số thứ hai là chuỗi "One".
SELECT DECODE(1, 1, 'One') FROM dual;
Cú pháp của hàm DECODE là:
DECODE (biểu thức, tìm kiếm, kết quả [, tìm kiếm, kết quả]… [, mặc định (tùy chọn)])
biểu thức
Giá trị phải được so sánh. Nó tự động được chuyển đổi thành kiểu dữ liệu của giá trị tìm kiếm đầu tiên trước khi so sánh.
tìm kiếm
Giá trị được so sánh với biểu thức.
kết quả
Giá trị được trả về, nếu biểu thức =tìm kiếm.
mặc định
Nếu không có kết quả phù hợp nào, hàm DECODE sẽ trả về mặc định và nếu bỏ qua mặc định, thì hàm sẽ trả về NULL.
Ví dụ về hàm DECODE
- Hàm DECODE có thể được sử dụng trong Oracle / PLSQL như sau
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Câu lệnh IF-THEN-ELSE tương đương cho câu lệnh DECODE () ở trên:
IF bank_id = 001 THEN result := 'SBI'; ELSIF bank_id = 002 THEN result := 'ICICI'; ELSIF bank_id = 003 THEN result := 'Dena'; ELSE result := 'Gateway'; END IF;
Hàm DECODE sẽ so sánh từng giá trị bank_id, từng giá trị một.
- Hàm DECODE để so sánh hai ngày (date1 và date2), trong đó, nếu date1> date2, thì hàm DECODE sẽ trả về date2. Nếu không, hàm DECODE sẽ trả về date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Công thức bên dưới bằng 0, nếu date1 lớn hơn date2:
(date1 - date2) - ABS(date1 - date2)
Ví dụ về ngày tháng được minh họa ở trên cũng có thể được sửa đổi như sau:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Câu lệnh DECODE sẽ trả về như sau:
Nếu hours_of_work <1 thì trả về 0.04
Nếu giờ_of_work> =1 và <5 thì trả về 0,04
Nếu hours_of_work> 5 thì trả về 0,06
Tại đây, bạn cần tạo một công thức sẽ đánh giá một số duy nhất cho từng phạm vi của bạn.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Đây là tất cả về hàm DECODE, đến đây chắc hẳn bạn đã có một bức tranh rõ ràng về cách hoạt động và mức độ hữu ích của hàm này. Bây giờ, hãy thử sử dụng chúng bất cứ khi nào cần bất kỳ logic IF-ELSE nào trong khi làm việc trên SQL. Tôi hy vọng bài viết đã giúp bạn về các khái niệm của câu lệnh DECODE.
Nếu bạn muốn tìm hiểu thêm về MySQL và làm quen với cơ sở dữ liệu quan hệ nguồn mở này, hãy xem Đào tạo chứng chỉ MySQL DBA của chúng tôi đi kèm với đào tạo trực tiếp do người hướng dẫn hướng dẫn và trải nghiệm dự án thực tế. Khóa đào tạo này sẽ giúp bạn hiểu sâu về MySQL và giúp bạn đạt được thành thạo về chủ đề này.
Bạn có câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của ”DECODE trong SQL” và tôi sẽ liên lạc lại với bạn.