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
KookieMonster
источник
1
Ах, я пытался = Null, а не Null. Спасибо,
Джеймс
Оба (=; IS) отлично работает в 9.4
Петр
0

Вы должны использовать одинарную кавычку:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''
Клара
источник
Технически, вы правы, строка в SQL должна быть разделена одинарными кавычками. Однако в этом конкретном случае OP не должен сравниваться со строкой (пустой или нет), потому что рассматриваемый столбец определяется как integer. Как вы можете прочитать в комментариях под принятым ответом, ФП решил попробовать сравнить с пустой строкой только потому, что они не выяснили, как правильно сравнивать с нулем (что и было на самом деле после).
Андрей М