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. Спасибі,
Джеймс

І те й інше (=; IS) працює чудово в 9.4
Петро

0

Ви повинні використовувати одну пропозицію:

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

Технічно ви маєте рацію, рядок у SQL має бути розмежовано одинарними лапками. Однак у цьому конкретному випадку ОП не слід порівнювати в першу чергу із рядком (порожнім чи ні), оскільки стовпець, про який йде мова, визначається як integer. Як ви можете прочитати в коментарях під прийнятою відповіддю, ОП вирішила спробувати порівняння з порожнім рядком лише тому, що вони не придумали, як правильно порівняти з null (що це було насправді після).
Андрій М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.