2011-12-14 36 views
48

Tôi muốn thực hiện toán tử điều kiện bậc ba trong MySQL. Tôi có một bảng trong đó một id trường tồn tại. 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 ba năm như sau:Làm thế nào để thực hiện toán tử điều kiện bậc ba trong MySQL

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

Có thể trong MySQL không?

+0

có thể trùng lặp của [Làm thế nào để bạn viết điều kiện trong câu lệnh chọn MySQL?] (Http://stackoverflow.com/questions/1647961/how-do-you-write-a-conditional-in- a-mysql-select-statement) –

Trả lời

94

Hãy thử điều này:

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

The documentation là bạn của bạn; Bạn nên đọc nó!

Nó nói:

IFNULL(expr1,expr2) 

Nếu expr1 không NULL, IFNULL() lợi nhuận expr1; nếu không sẽ 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 NULL và đối tượng so sánh là toán hạng thứ hai; rằng điều đó không xảy ra khi sử dụng các ký hiệu ?: để giúp bạn ở đó không thực sự liên quan đến bất kỳ đ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 đang tuyệt vọng để cung cấp ba toán hạng một cách rõ ràng (tại sao ?!), sau đó chuyển sang IF:

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

+1, nhưng để trả lời câu hỏi: 'TRƯỜNG HỢP KHI id IS NULL THEN 0 ELSE id END' –

+0

@ MichaelKrelin-hacker: Tương tự, không? Và 'IFNULL' là terser. –

+0

@ MichaelKrelin-hacker: Ồ, tôi hiểu rồi. –

14

Có hai cách để bạn có thể triển khai cùng một logic với toán tử bậc ba:

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

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

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

IFNULL(ID, 0) 
COALESCE(ID, 0) 
Các vấn đề liên quan