SQLite chọn nơi trống?


125

Trong SQLite, làm cách nào tôi có thể chọn các bản ghi trong đó some_column trống?
Giá trị trống được tính là cả NULL và "".


8
Nó sẽ hữu ích nếu bạn cụm từ câu hỏi dưới dạng câu hỏi. Chúng ta phải trả lời những gì?
javawizard

Câu trả lời:


288

Có một số cách, như:

where some_column is null or some_column = ''

hoặc là

where ifnull(some_column, '') = ''

hoặc là

where coalesce(some_column, '') = ''

của

where ifnull(length(some_column), 0) = 0

Ưu điểm của từng giải pháp là gì?
Pacerier

1
@Pacerier: Có thể có một số khác biệt về hiệu suất, nhưng khác với điều đó, đó chỉ là vấn đề về phong cách.
Guffa

3
@Guffa Ý tôi là tất nhiên về hiệu suất .. Đây là cơ sở dữ liệu phải không? tối ưu hóa là quan trọng trong dbs. tăng chút hiệu suất là rất nhiều
Pacerier

4
Chiều dài (some_column) nên được tránh, vì điều này có thể tính toán độ dài nhanh chóng - AFAIK SQLite hiện tại thực hiện đối với các cột có sở thích văn bản. Ngoài ra, bạn đang ở trong lòng của trình tối ưu hóa - mặc dù tôi mong đợi chúng giống hệt nhau. Bạn có thể xác minh điều đó bằng cách sử dụng EXPLAIN.
peterchen

@peterchen: Vâng, nó phụ thuộc vào những gì người tối ưu hóa làm. Tôi bao gồm lengthví dụ vì nó thực sự có thể nhanh hơn trong một số tình huống, vì so sánh các số đơn giản hơn so sánh các chuỗi. Nếu hiệu suất cho điều đó là một mối quan tâm, tất nhiên bạn nên kiểm tra xem nó làm gì.
Guffa

27

Có vẻ như bạn chỉ cần làm:

SELECT * FROM your_table WHERE some_column IS NULL OR some_column = '';

Trường hợp thử nghiệm:

CREATE TABLE your_table (id int, some_column varchar(10));

INSERT INTO your_table VALUES (1, NULL);
INSERT INTO your_table VALUES (2, '');
INSERT INTO your_table VALUES (3, 'test');
INSERT INTO your_table VALUES (4, 'another test');
INSERT INTO your_table VALUES (5, NULL);

Kết quả:

SELECT id FROM your_table WHERE some_column IS NULL OR some_column = '';

id        
----------
1         
2         
5    

1

Có thể ý bạn là

select x
from some_table
where some_column is null or some_column = ''

nhưng tôi không thể nói vì bạn đã không thực sự đặt một câu hỏi.


0

Bạn có thể làm điều này với những điều sau:

int counter = 0;
String sql = "SELECT projectName,Owner " + "FROM Project WHERE Owner= ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, "");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
    counter++;
}
System.out.println(counter);

Điều này sẽ cung cấp cho bạn không có hàng mà giá trị cột là null hoặc trống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.