PostgreSQL, tamsayı tipinde boş alanlar seçerek


13

Bir tablo var ve fk_fc_idalan (onları silmek için bir başlangıç ​​olarak) için boş bir değere sahip tüm satırları seçmek gerekir ,

    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)

Ancak bu işe yaramıyor,

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

Denemek Nullde işe yaramıyor.

Herkes bunu nasıl sıralamak için herhangi bir öneri varsa, çok minnettar olacaktır.


1
data_item'den fk_fc_id, di_timestamp, di_item_value seçin; burada fk_fc_id null
foibs

2
PostgreSQL'deki dize için çift tırnak kullanılmaz. Dizeler için tek tırnak kullanılır. Ancak sıfır uzunluklu dizeleri tamsayılarla karşılaştırmamalısınız! Ve işleç nullkullanarak değerleri karşılaştırmak =her zaman geri döner nullve bu satırın hariç tutulmasına neden olur.
Colin 't Hart

Yanıtlar:


21

Bu gerçekten veritabanı yönetimi ile ilgili değildir, ne de PostgreSQL ile ilgili değildir, ancak @foibs'ın yanıtladığı gibi, IS NULL'a bir göz atmalısınız :

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

1
Ah, Null yerine = Null deniyordum. Teşekkürler,
James

Her ikisi de (=; IS) 9.4'te iyi çalışıyor
Petr

0

Tek tırnak kullanmalısınız:

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

Teknik olarak, haklısınız, SQL'de bir dize tek tırnaklarla sınırlanmalıdır. Ancak, bu özel durumda, OP ilk başta bir dize (boş veya değil) ile karşılaştırılmamalıdır, çünkü söz konusu sütun olarak tanımlanır integer. Kabul edilen cevabın altındaki yorumlarda okuyabileceğiniz gibi, OP sadece boş bir dize ile karşılaştırmayı denemeye karar verdi çünkü sadece null ile doğru bir şekilde nasıl karşılaştırılacağını anlayamamışlardı (aslında bundan sonra oldukları şeydi).
Andriy M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.