2012-11-05 30 views
17

Tôi có hai trường mà tôi so sánh với chức năng của MySQL COALESCE(). Ví dụ: COALESCE(Field1, Field2). Vấn đề là, Field1 đôi khi trống nhưng không rỗng; vì nó không null COALESCE() chọn Field1, mặc dù nó trống. Trong trường hợp đó, tôi cần nó để chọn Field2.COALESCE() cho các trường trống (nhưng không rỗng)

Tôi biết tôi có thể viết câu lệnh if-then-else (CASE) trong truy vấn để kiểm tra điều này, nhưng có một hàm đơn giản đẹp như COALESCE() cho các trường trống nhưng không phải không?

Trả lời

25
SELECT IFNULL(NULLIF(Field1,''),Field2) 

NULLIF trả về NULL nếu trường 1 trống, trong khi IFNULL trả về trường 1 nếu không trống hoặc NULL và trường 2.

+4

Tôi có thể làm tương tự, nhưng với COALESCE chính xác? 'COALESCE (NULLIF (Trường1, ''), Field2)' - có chênh lệch tải/tốc độ xử lý không? –

+0

Phản hồi thú vị về 'COALESCE' so với' IFNULL' tại đây: http://stackoverflow.com/questions/4747877/mysql-ifnull-vs-coalesce-which-is-faster –

+0

@John chính xác http://stackoverflow.com/ a/27485689/1654265 –

6

Bạn có thể sử dụng một biểu CASE:

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END 
+0

Đó là ý tôi là nếu-thì-khác; Tôi đang tìm kiếm một giải pháp sạch hơn, một dòng –

+3

Bây giờ là một dòng :) –

6

Tôi biết tôi là muộn để bên đây, nhưng có một cách để làm điều này trong khi vẫn sử dụng liên hiệp(). Điều này sau đó sẽ hoạt động nếu giá trị của bạn là NULL hoặc ''.

Select COALESCE(NULLIF(Field1,''), Field2) 
+1

Xem nhận xét về câu trả lời đã chọn :) –

+0

Vâng, bạn đã đến rồi! Không thấy điều đó. – Beachhouse

Các vấn đề liên quan