Cách triển khai toán tử điều kiện bậc ba trong MySQL


89

Tôi muốn triển khai toán tử điều kiện bậc ba trong MySQL. Tôi có một bảng trong đó tồn tại một id trường. Giá trị của nó có thể là null. Tôi muốn hiển thị idở định dạng có điều kiện bậc ba như sau:

select id = id == null ? 0 : id;

Nó có thể trong MySQL không?


Câu trả lời:


149

Thử đi :

select if(Id is null, 0, id) as Id;

1
Thật tiếc khi không có tốc ký. Nếu bạn chỉ muốn nhận giá trị đầu tiên tương đương với true, bạn phải kiểm tra nullhoặc ''và thậm chí có thể 0. mySQL đôi khi
hơi ngớ ngẩn

53

Tài liệu là bạn của bạn; Bạn nên đọc nó!

Nó nói rằng:

IFNULL(expr1,expr2)

Nếu expr1không NULL, IFNULL()trả về expr1; nếu không thì nó trả về expr2.

Và sau đó là rất nhiều ví dụ. Điều này tương đương với việc sử dụng một điều kiện bậc ba với một so sánh với NULLvà chủ thể so sánh làm toán hạng thứ hai; rằng nó không xảy ra khi sử dụng các biểu tượng ?:bạn không thực sự liên quan đến bất cứ điều gì.

Vì vậy, trong trường hợp của bạn:

SELECT IFNULL(`id`, 0) FROM `table`

Nếu bạn muốn cung cấp ba toán hạng một cách rõ ràng (tại sao ?!), thì hãy chuyển sang IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

4
+1, nhưng để trả lời câu hỏi:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker

@ MichaelKrelin-hacker: Điều tương tự, không? Và IFNULLlà ngắn gọn.
Các cuộc đua ánh sáng trong quỹ đạo

@ MichaelKrelin-hacker: Ồ, hiểu rồi.
Các cuộc đua ánh sáng trong quỹ đạo

Chắc chắn, chỉ để trả lời các câu hỏi về ternary :)
Michael Krelin - tin tặc

Trong trường hợp của tôi, tôi cần sử dụng IFthay vì IFNULLhoặc COALESCEvì tôi đang di chuyển dữ liệu sang cơ sở dữ liệu của nhà cung cấp khác và không muốn nhập các giá trị không phải null, chỉ diễn giải nó dưới dạng trạng thái chung. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statuslàm việc cho tôi.
Adam Elsodaney

22

Có hai cách mà bạn có thể triển khai logic tương tự như toán tử bậc ba:

  1. Sử dụng IFchức năng, ví dụ.IF(expression, true result, false result)
  2. Sử dụng CASEbiểu thức, ví dụ.

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

Khi bạn đang kiểm tra NULL thì bạn có thể sử dụng các chức năng IFNULLhoặc COALESCE, ví dụ.

IFNULL(ID, 0)
COALESCE(ID, 0)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.