2012-07-30 24 views
7

Làm thế nào để viết một trường hợp trong truy vấn mysql mà kiểm tra cho null hoặc 0 cho một cột cụ thểMysql Case với Hoặc tình trạng

 

CREATE TABLE tblConfirmationStatus (Confirm_Status TINY INT) 

INSERT INTO tblConfirmationStatus 
Confirm_Status 
VALUES 
(1), 
(0), 
(1), 
({null}), 
(0), 
(1), 
({null}) 

Output buộc

ConfirmStatus

 
    Confirmed 
    Not Confirmed 
    Confirmed 
    Not Confirmed 
    Not Confirmed 
    Confirmed 
    Not Confirmed 

0 hoặc Null - Chưa được xác nhận, 1-Confirmed

 
SELECT CASE Confirm_Status 
      WHEN NULL OR 0 THEN 'Not Confirmed' 
      ELSE 'Confirmed' END AS ConfirmStatus 
    FROM tblConfirmationStatus; 
+0

NULL rất dễ lây và chuyển đổi bất kỳ hoạt động boolean/so sánh bình thường nào thành NULLs. Một câu lệnh case chỉ đơn giản là cách viết hay 'if (confirm_status = null) ...'. Bạn cần 'ISNULL()' để xử lý đúng. –

Trả lời

23

Có hai lựa chọn cho báo cáo CASE - một trong những bạn đăng, hay:

SELECT CASE 
     WHEN Confirm_Status IS NULL OR Confirm_Status = 0 THEN 'Not Confirmed' 
     ELSE 'Confirmed' 
     END AS ConfirmStatus 

Nhưng có lẽ bạn có thể sử dụng:

SELECT CASE 
     WHEN Confirm_Status > 0 THEN 'Confirmed' 
     ELSE 'Not Confirmed' 
     END AS ConfirmStatus 

NULL là sự vắng mặt của một giá trị, vì vậy kiểm tra đối với các giá trị trên 0 sẽ rơi vào cùng một danh mục bằng 0.

+0

Cảm ơn bạn đã trợ giúp – Athi

1

Bạn đã xem qua sử dụng toán tử IFNULL.

IFNULL (expr1, expr2)

Nếu expr1 không phải là NULL, IFNULL() trả về expr1; ngược lại, nó trả về expr2. IFNULL() trả về một giá trị số hoặc chuỗi, tùy thuộc vào ngữ cảnh mà nó được sử dụng.

2
SELECT IF((Confirm_Status IS NULL OR Confirm_Status = 0), 
      'Not Confirmed', 'Confirmed') AS ConfirmStatus 
FROM tblConfirmationStatus; 
Các vấn đề liên quan