PostgreSQL selecionando campos vazios do tipo inteiro

12

Eu tenho uma tabela e preciso selecionar todas as linhas com um valor vazio para o fk_fc_idcampo (como um prelúdio para excluí-las),

    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)

No entanto, isso não funciona,

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

Tentar Nulltambém não funciona.

Se alguém tiver alguma sugestão sobre como resolver isso, ficaria muito grato.

James
fonte
1
selecione fk_fc_id, di_timestamp, di_item_value em data_item em que fk_fc_id é nulo
foibs
2
Aspas duplas não são usadas para seqüências de caracteres no PostgreSQL. Aspas simples são usadas para seqüências de caracteres. Mas você não deve comparar cadeias de comprimento zero com números inteiros! E comparar valores com o nulluso do =operador sempre retornará nulle fará com que essa linha seja excluída.
Colin 'Hart

Respostas:

20

Isso não é realmente relacionado à administração de banco de dados, nem ao PostgreSQL, mas como o @foibs respondeu, você deve dar uma olhada em IS NULL :

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL
KookieMonster
fonte
1
Ah, eu estava tentando = Nulo ao invés de Nulo. Obrigado, #
03413 James
Ambos (=; IS) funcionam bem em 9.4
Petr
0

Você tem que usar aspas simples:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''
Clara
fonte
Tecnicamente, você está certo, uma string no SQL deve ser delimitada com aspas simples. No entanto, nesse caso específico, o OP não deve ser comparado a uma sequência (vazia ou não) em primeiro lugar, porque a coluna em questão é definida como integer. Como você pode ler nos comentários sob a resposta aceita, o OP decidiu tentar a comparação com uma sequência vazia apenas porque eles não descobriram como comparar corretamente com nulo (que é o que eles realmente procuravam).
Andriy M