2012-03-05 62 views
40

Làm thế nào để bạn thay thế giá trị NULL trong lựa chọn bằng một chuỗi rỗng? Nó không nhìn rất chuyên nghiệp để đầu ra "NULL" giá trị.Truy vấn MySql Thay thế NULL bằng Chuỗi rỗng trong Chọn

Điều này rất bất thường và dựa trên cú pháp của tôi, tôi hy vọng nó hoạt động. Hy vọng giải thích tại sao nó không thành công.

select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test; 

Ví dụ về những gì các bảng gốc có vẻ như, những gì tôi muốn, và những gì bản in thực tế:

original  wanted  what actually prints 
--------  ------  --------------------- 
value1  value1  
NULL      NULL 
value2  value2  
NULL      NULL 

Như bạn có thể thấy nó trái ngược với những gì tôi muốn, vì thế tôi đã cố gắng flipping IS NULL để IS NOT NULL và tất nhiên là không khắc phục được nó, cũng cố gắng trao đổi vị trí của trường hợp khi nó không hoạt động.

Chỉnh sửa: Có vẻ như 3 giải pháp được đưa ra dưới đây đều thực hiện tác vụ. Liên quan

select if(prereq IS NULL ," ",prereq) from test 
select IFNULL(prereq,"") from test 
select coalesce(prereq, '') from test 
+1

Tôi nghĩ '(prereq IS NULL)' chỉ cần đọc 'NULL' – ScottJShea

Trả lời

2

Một số được xây dựng trong các chức năng nên làm việc:

Coalesce 
Is Null 
IfNull 
0

Hãy thử điều này, điều này cũng nên thoát khỏi những dòng sản phẩm nào cũng:

SELECT prereq FROM test WHERE prereq IS NOT NULL; 
+0

Đây là lọc đầu ra mà tôi không nghĩ rằng OP là sau – Simon

+0

Đây là giải pháp của tôi dựa trên ví dụ của mình. Tôi không thực sự thấy lý do các dòng trống sẽ chuyên nghiệp hơn các giá trị NULL. –

9

Hãy thử dưới đây;

select if(prereq IS NULL ," ",prereq) from test 
+0

Làm thế nào để tôi bỏ qua khi null? (không chọn nó?) – Pathros

1

Hãy thử COALESCE. Nó trả về giá trị không NULL đầu tiên.

SELECT COALESCE(`prereq`, ' ') FROM `test` 
55
SELECT COALESCE(prereq, '') FROM test 

liên hiệp sẽ trở lại với lập luận không null đầu tiên được truyền cho nó từ trái sang phải. Nếu tất cả các arguemnts là null, nó sẽ trả về null, nhưng chúng ta đang buộc một chuỗi rỗng ở đó, vì vậy không có giá trị null nào được trả về.

Cũng lưu ý rằng toán tử COALESCE được hỗ trợ trong SQL chuẩn. Đây không phải là trường hợp của IFNULL. Vì vậy, nó là một thực hành tốt để có được sử dụng trước đây. Ngoài ra, hãy nhớ rằng COALESCE hỗ trợ nhiều hơn 2 tham số và nó sẽ lặp lại chúng cho đến khi tìm thấy một sự trùng hợp không null.

+1

Đồng ý nó là đáng chú ý đặc tính MySQL của IFNULL. Nó hoạt động trong trường hợp OP nhưng có thể không có trong trường hợp khác. – JScoobyCed

76

Nếu bạn thực sự phải ra mỗi giá trị bao gồm cả những người NULL:

select IFNULL(prereq,"") from test 
+0

+1 đây là câu trả lời đơn giản nhất IMO – Simon

+0

Bạn sẽ làm thế nào để bỏ chọn hoặc bỏ qua khi có giá trị null ??? – Pathros

3

Hình thức ban đầu là gần như hoàn hảo, bạn chỉ cần bỏ qua prereq sau TRƯỜNG HỢP:

SELECT 
    CASE 
    WHEN prereq IS NULL THEN ' ' 
    ELSE prereq 
    END AS prereq 
FROM test; 
Các vấn đề liên quan