PostgreSQL selezionando campi vuoti di tipo intero


13

Ho una tabella e devo selezionare tutte le righe con un valore vuoto per il fk_fc_idcampo (come preludio alla loro eliminazione),

    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)

Tuttavia, questo non funziona,

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

Anche provare Nullnon funziona.

Se qualcuno ha qualche suggerimento su come ordinare questo, sarei molto grato.


1
seleziona fk_fc_id, di_timestamp, di_item_value da data_item dove fk_fc_id è null
foibs

2
Le virgolette doppie non vengono utilizzate per le stringhe in PostgreSQL. Le virgolette singole vengono utilizzate per le stringhe. Ma non dovresti confrontare le stringhe di lunghezza zero con numeri interi! E il confronto dei valori con l' nullutilizzo =dell'operatore restituirà sempre nulle farà sì che quella riga venga esclusa.
Colin 't Hart,

Risposte:


21

Questo non è realmente legato all'amministrazione del database, né riguarda PostgreSQL, ma dato che @foibs ha risposto, dovresti dare un'occhiata a IS NULL :

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

1
Ah, stavo provando = Null anziché Null. Grazie,
James

Entrambi (=; IS) funzionano bene in 9.4
Petr

0

Devi usare una virgoletta singola:

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

Tecnicamente, hai ragione, una stringa in SQL dovrebbe essere delimitata da virgolette singole. Tuttavia, in questo caso specifico l'OP non dovrebbe essere confrontato con una stringa (vuota o no) in primo luogo, perché la colonna in questione è definita come integer. Come puoi leggere nei commenti sotto la risposta accettata, l'OP ha deciso di provare il confronto con una stringa vuota solo perché non avevano capito come confrontare correttamente il valore null (che è quello che stavano effettivamente cercando).
Andriy M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.