PostgreSQL memilih bidang kosong bertipe integer


13

Saya punya tabel dan saya harus memilih semua baris dengan nilai kosong untuk fk_fc_idbidang tersebut (sebagai awal untuk menghapusnya),

    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)

Namun ini tidak berhasil,

# 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="";
                                                                    ^

Mencoba Nulljuga tidak berhasil.

Jika ada yang punya saran tentang cara mengurutkan ini, saya akan sangat berterima kasih.


1
pilih fk_fc_id, di_timestamp, di_item_value dari data_item di mana fk_fc_id adalah null
foibs

2
Kutipan ganda tidak digunakan untuk string di PostgreSQL. Kutipan tunggal digunakan untuk string. Tetapi Anda tidak harus membandingkan string panjang nol dengan bilangan bulat! Dan membandingkan nilai dengan nullmenggunakan =operator akan selalu kembali nulldan menyebabkan baris tersebut dikecualikan.
Colin 't Hart

Jawaban:


21

Ini bukan administrasi database yang terkait, juga bukan tentang PostgreSQL, tetapi ketika @foibs menjawab, Anda harus melihat pada IS NULL :

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

1
Ah, saya mencoba = Null daripada Null. Terima kasih,
James

Keduanya (=; IS) berfungsi dengan baik dalam 9,4
Petr

0

Anda harus menggunakan kutipan tunggal:

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

Secara teknis, Anda benar, string dalam SQL harus dibatasi dengan tanda kutip tunggal. Namun, dalam kasus khusus ini OP tidak boleh dibandingkan dengan string (kosong atau tidak) di tempat pertama, karena kolom yang dimaksud didefinisikan sebagai integer. Seperti yang dapat Anda baca di komentar di bawah jawaban yang diterima, OP memutuskan untuk mencoba perbandingan dengan string kosong hanya karena mereka tidak menemukan cara membandingkan dengan benar dengan null (yang sebenarnya mereka cari setelahnya).
Andriy M
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.