2013-01-05 32 views
19

Sto cercando di ottenere campi "di testo" vuoti dalla mia tabella che ho cancellato manualmente con pgadmin. Inizialmente in quei campi era '' e io li può interrogare in questo modo:Postgresql, selezionare campi vuoti

SELECT mystr, mystr1 FROM mytable WHERE mystr='' or mystr1='' 

Ma non funzionerà se elimino il testo da loro e lasciare celle vuote.

Come scrivere una query per ottenere insieme quelle "e le celle chiare nel risultato? Oppure solo celle chiare?

+0

Le stringhe sono vuote o NULL? (in postgres '''' e 'NULL' sono diversi) – wildplasser

+0

Non so che cosa sia 'tipo di cella vuota', ho appena cancellato tutto il testo della cella con pgadmin. Ora provo a interrogare WHERE mystr = NULL O mystr1 = NULL, e non ho ottenuto risultati. –

+6

Non è possibile confrontare NULL, NULL non è un valore, è ortogonale. Dovresti usare 'WHERE mystr IS NULL'. – wildplasser

risposta

37
SELECT mystr, mystr1 
FROM mytable 
WHERE COALESCE(mystr, '') = '' 
    OR COALESCE(mystr1, '') = '' 
    ; 

Spiegazione: la funzione coalesce(a,b,c, ...) attraversa l'elenco a,b,c,... da sinistra a destra e si ferma al primo elemento non nullo. a,b,c può essere qualsiasi espressione (o costante), ma deve fornire lo stesso tipo (o essere coercitivo allo stesso tipo).

+0

Grazie "wildplasser", non vedo mai tale espressione o comando. Devo esaminare attentamente questo problema, ma ancora non trovo le mie celle vuote Fortunatamente, copiando i dati sul blocco note, ho scoperto che in quelle celle "vuote" pgadmin lascia uno spazio (chr (32)), quindi WHERE mystr = '' dai risultati. È qui (in postgresql) una funzione come TRIM che può rifiutare spazi da entrambi i lati di una stringa? –

+0

Sì, esiste una funzione TRIM() È ANSI-SQL (proprio come COALESCE()) – wildplasser

Problemi correlati