SQLite เลือกที่ว่าง?


125

ใน SQLite ฉันจะเลือกระเบียนที่ some_column ว่างเปล่าได้อย่างไร
การว่างจะนับเป็นทั้ง NULL และ ""


8
ช่วยได้หากคุณส่งคำถามเป็นคำถาม เราควรจะตอบอะไร?
javawizard

คำตอบ:


288

มีหลายวิธีเช่น:

where some_column is null or some_column = ''

หรือ

where ifnull(some_column, '') = ''

หรือ

where coalesce(some_column, '') = ''

ของ

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

ข้อดีของแต่ละโซลูชันคืออะไร?
Pacerier

1
@Pacerier: ประสิทธิภาพอาจแตกต่างกันบ้าง แต่นอกเหนือจากนั้นก็เป็นเพียงเรื่องของสไตล์เท่านั้น
Guffa

3
@ กัฟฟาผมหมายถึงประสิทธิภาพแน่นอน .. นี่คือฐานข้อมูลไม่ใช่เหรอ? การเพิ่มประสิทธิภาพมีความสำคัญในหน่วย dbs การเพิ่มประสิทธิภาพเพียงเล็กน้อยก็มาก
Pacerier

4
ควรหลีกเลี่ยงความยาว (some_column) เนื่องจากอาจคำนวณความยาวได้ทันที - AFAIK SQLite ปัจจุบันใช้สำหรับคอลัมน์ที่มีความสัมพันธ์ของข้อความ นอกเหนือจากนั้นคุณยังอยู่ในความเมตตาของเครื่องมือเพิ่มประสิทธิภาพ - แม้ว่าฉันจะคาดหวังว่ามันจะเหมือนกันก็ตาม คุณสามารถตรวจสอบได้โดยใช้ EXPLAIN
peterchen

@peterchen: ใช่มันขึ้นอยู่กับสิ่งที่เครื่องมือเพิ่มประสิทธิภาพทำ ฉันรวมlengthตัวอย่างไว้เนื่องจากอาจเร็วกว่าในบางสถานการณ์เนื่องจากการเปรียบเทียบตัวเลขนั้นง่ายกว่าการเปรียบเทียบสตริง หากประสิทธิภาพสำหรับสิ่งนั้นเป็นปัญหาคุณควรตรวจสอบสิ่งที่ทำ
Guffa

27

ดูเหมือนว่าคุณสามารถทำได้:

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

กรณีทดสอบ:

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);

ผลลัพธ์:

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

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

1

บางทีคุณอาจหมายถึง

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

แต่ฉันบอกไม่ได้เพราะคุณไม่ได้ถามคำถามจริงๆ


0

คุณสามารถทำได้ดังต่อไปนี้:

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);

สิ่งนี้จะทำให้คุณไม่มีแถวที่ค่าคอลัมน์เป็นโมฆะหรือว่างเปล่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.