2009-09-17 32 views
61

Chúng ta hãy giả sử bảng sau (ví dụ như một kết quả của nhiều bên tham gia báo cáo):MySQL: Typecasting NULL 0

id | column_1 | column_2 
------------------------ 
1 | 1  | 
2 | 2  | 2 
3 |   | 3 

nào bạn có thể ví dụ như nhận được từ các tuyên bố sau:

select a.id, t1.column_1, t2.column_2 
from a 
left join t1 on a.id = t1.id 
left join t2 on a.id = t2.id 

Bây giờ, nếu tôi muốn tổng hợp t1.column_1 và t2.column_2 như sau

select 
    a.id, 
    t1.column_1, 
    t2.column_2, 
    (t1.column_1 + t2.column_2) as cumulated 
from a 
left join t1 on a.id = t1.id 
left join t2 on a.id = t2.id 

Các reslut sẽ trông như sau:

id | column_1 | column_2 | cumulated 
------------------------------------ 
1 | 1  | NULL  | NULL 
2 | 2  | 2  | 4 
3 | NULL | 3  | NULL 

Câu hỏi của tôi về cơ bản là: có cách nào để đánh máy NULL thành 0 để thực hiện một số phép tính không?

Tôi đã thử CONVERT(t1.column_1, SIGNED)CAST(t1.column_1 as SIGNED), nhưng NULL vẫn là NULL.

Trả lời

121

Sử dụng IFNULL(column, 0) để chuyển đổi giá trị cột thành 0. Ngoài ra, hàm COALESCE sẽ thực hiện tương tự, ngoại trừ (1) COALESCE là ANSI tuân thủ, IFNULL không, và (2) COALESCE có số cột/giá trị tùy ý và sẽ trả về giá trị không null đầu tiên được truyền cho nó .

+0

và kết hợp có thể có nhiều giá trị? –

+7

Có ... vì vậy COALESCE (cột1, cột2, 0) sẽ trả về giá trị không rỗng đầu tiên của các giá trị này. Ghi nhớ điều này hoạt động theo chiều ngang, không theo chiều dọc. Các cột phải thuộc về cùng một hàng của bảng. –

+0

@David: Làm tốt lắm. –