2012-01-18 24 views
13

Mô tả:MySql, IFNULL(), COALSESCE() trên String không thay thế

tuyên bố của tôi nên thay thế mỗi trống title_column với 'tên không', nhưng nó không phải không:

SELECT 
    COALESCE(main_table.title_column, 'no name') AS title 
FROM main_table; 

IFNULL() hoạt động theo cùng một cách.

Tôi đang làm gì sai?

+3

Có thể bạn đang thấy giá trị chuỗi trống thay vì giá trị null? – Ilion

+0

rõ ràng, đó là trường hợp. và một người dùng khác đã đăng giải pháp ... – kiltek

Trả lời

21

COALESCEIFNULL thay thế chỉ NULL giá trị, bảng của bạn dường như chứa các chuỗi rỗng:

SELECT 
    COALESCE(NULLIF(main_table.title_column, ''), 'no name') AS title 
FROM main_table; 
4

Trong MySQL một chuỗi NULL và rỗng ('') chuỗi không phải là những điều tương tự.

Bạn có một vài lựa chọn, cho quán tôi sử dụng TRƯỜNG HỢP ...

CASE WHEN main_table.title_column = '' THEN 'no name' ELSE main_table.title_column END 

Các tùy chọn khác có thể là liên hiệp (NULLIF()) được hiển thị trên một câu trả lời (trong đó sử dụng NULLIF() để biến rỗng chuỗi thành NULL và sau đó sử dụng kết hợp như bạn muốn).

Hoặc có thể chỉ IIF() để rút ngắn câu lệnh CASE ...

IIF(main_table.title_column = '', 'no name', main_table.title_column) 
1

sử dụng giải pháp này cho MySql,

SELECT IF((TRIM(main_table.title_column) = ''),'no name', COALESCE(main_table.title_column, 'no name')) AS title FROM main_table 
2

Nếu bạn thích một cách chức năng của các giải pháp đưa ra bạn có thể luôn sử dụng điều này:

DELIMITER $$ 
-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- -------------------------------------------------------------------------------- 
-- Note: add your server side comments to remember what this routine does on your Api 
-- -------------------------------------------------------------------------------- 
DROP FUNCTION IF EXISTS `IfNullOrEmpty`$$ 
CREATE FUNCTION `IfNullOrEmpty`(s TEXT, value TEXT) RETURNS TEXT 
NOT DETERMINISTIC 
READS SQL DATA 
BEGIN 

IF ((s is null) OR (trim(s) = '') ) THEN 
    return value; 
END IF; 
return s;  
END$$ 

Cách sử dụng:

SELECT IfNullOrEmpty(t.FieldName,'No Name Given') as Name FROM cms_Table t 
Các vấn đề liên quan