2008-10-21 39 views

Trả lời

11

Chức năng COALESCE() làm những gì bạn mô tả. Đó là SQL tiêu chuẩn và nó sẽ được hỗ trợ trong tất cả các cơ sở dữ liệu SQL.

Chức năng IFNULL() không phải là tiêu chuẩn SQL. Chỉ một số nhãn hiệu cơ sở dữ liệu hỗ trợ chức năng này.

3

Bạn có thể muốn nhìn vào IFNULL hoặc COALESCE. Nếu tôi nhớ chính xác, IFNULL sẽ hoạt động với MySQL.

+0

IFNULL là tương đương cho mysql. –

0

Có thể biết chức năng MS Access NZ() thực sự sẽ hữu ích (trước khi trả lời với các đề xuất hoàn toàn không hợp lệ). Các NZ() Chức năng kiểm tra cho Null và thay thế các Null với một chuỗi rỗng, một Zero hoặc tùy chọn một giá trị mà người dùng nhập vào.

COALESCE thậm chí không đến gần, trên thực tế nó trả về giá trị Null nếu không có giá trị Null nào trong 'Danh sách ???'

IFNULL() Chức năng là những gì bạn đang tìm kiếm.

http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html

+2

Ý tưởng với COALESCE là bạn đặt giá trị cuối cùng là giá trị mặc định không null của bạn: COALESCE (MightBeNull, MightAlsoBeNull, CouldBeNull, 'DefaultValue') ... – diamondsea

+0

Ở đây, ngay trên đây! Và tôi có thể thêm, rằng nz() không yêu cầu một danh sách nào cả. Nó có thể hoạt động trên một phần tử duy nhất để loại bỏ bất kỳ giá trị rỗng nào trong đó và trả về số không hoặc "". Đó là một công cụ tuyệt vời để đối phó với null. Coalesce không làm điều tương tự, và trên hết là nếu được sử dụng với 2 tham số là thẳng thắn và dài dòng. tức là bạn không thể Coalesce (x). Nhưng bạn có thể nz (x). –

2

liên hiệp không chỉ là những gì OP được yêu cầu, cũng như IFNULL:

SELECT Nz(MightBeNullVar, 0) FROM ... (MS Access version) 
SELECT COALESCE(MightBeNullVar, 0) FROM ... (MySQL version) 
SELECT IFNULL(MightBeNullVar, 0) FROM ... (MySQL version) 

Sự khác biệt là liên hiệp có thể tìm kiếm thông qua nhiều biến và trở lại là người đầu tiên không null một:

SELECT COALESCE(MightBeNullVar, MightAlsoBeNullVar, CouldBeNullVar, 0) FROM ... (MySQL version) 

mỗi giá trị này sẽ trả về 0 (không) nếu không có giá trị nào có giá trị được đặt (là rỗng).

IFNULL là (khá vô nghĩa) nhanh hơn. Có thể có những thứ tốt hơn khác để tối ưu hóa trong truy vấn của bạn trước khi làm phiền với IFNULL và các vấn đề về COALESCE. Nếu bạn có nhiều thứ để kiểm tra, hãy sử dụng COALESCE. Nếu bạn chỉ có một giá trị duy nhất để kiểm tra, hãy sử dụng IFNULL.

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