PostgreSQL เลือกฟิลด์ว่างของประเภทจำนวนเต็ม


13

ฉันมีตารางและฉันต้องเลือกแถวทั้งหมดที่มีค่าว่างสำหรับfk_fc_idฟิลด์ (เพื่อนำไปลบ)

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

อย่างไรก็ตามสิ่งนี้ไม่ทำงาน

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

การพยายามNullไม่ทำงานเช่นกัน

หากใครมีข้อเสนอแนะเกี่ยวกับวิธีการจัดเรียงนี้ฉันจะขอบคุณมาก


1
เลือก fk_fc_id, di_timestamp, di_item_value จาก data_item ที่ fk_fc_id เป็นโมฆะ
foibs

2
อัญประกาศคู่ไม่ได้ใช้สำหรับสตริงใน PostgreSQL ใช้เครื่องหมายคำพูดเดี่ยวสำหรับสตริง แต่คุณไม่ควรเปรียบเทียบสตริงที่มีความยาวเป็นศูนย์กับจำนวนเต็ม! และการเปรียบเทียบค่ากับการnullใช้=โอเปอเรเตอร์จะส่งคืนnullและทำให้แถวนั้นถูกแยกออกเสมอ
Colin 't Hart

คำตอบ:


21

นี่ไม่เกี่ยวข้องกับการดูแลฐานข้อมูลจริงๆหรือไม่เกี่ยวกับ PostgreSQL แต่ตามที่ @foibs ตอบแล้วคุณควรดูIS NULL :

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
อาฉันลอง = Null แทนที่จะเป็น Null ขอบคุณ
James

ทั้ง (=; IS) ทำงานได้ดีใน 9.4
Petr

0

คุณต้องใช้เครื่องหมายคำพูดเดี่ยว:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

ในทางเทคนิคคุณถูกต้องสตริงใน SQL ควรคั่นด้วยเครื่องหมายคำพูดเดี่ยว แต่ในกรณีนี้โดยเฉพาะ OP ไม่ควรเปรียบเทียบกับสตริง (ว่างหรือไม่) integerในสถานที่แรกเพราะคอลัมน์ในคำถามที่ถูกกำหนดให้เป็น เนื่องจากคุณสามารถอ่านความคิดเห็นภายใต้คำตอบที่ยอมรับได้ OP ตัดสินใจลองเปรียบเทียบกับสตริงว่างเปล่าเท่านั้นเนื่องจากพวกเขาไม่ได้คิดวิธีเปรียบเทียบอย่างถูกต้องกับ null (ซึ่งเป็นสิ่งที่พวกเขาจริงหลังจากนั้น)
Andriy M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.